求助
查看原帖
求助
1546674
Pufflet233楼主2025/1/21 23:46

差两个测试点,50%
subtask #3的#6和#9 WA了
求大佬帮助

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,d,e,f,g,h,i,j;
    scanf("%d%d",&a,&b);
    vector<int> shenfen(b),v(b,0),w(b,0)/*zhensi*/,duyao(b,0),jieyao(b,0),y(b)/*jineng*/,x(b)/**/,lin1,lin2;
    for(i=0;i<b;++i){
        scanf("%d",&shenfen[i]);
    }
    for(i=0;i<a;++i){
        scanf("%d",&c);
        int lieren=0,siwang=0;
        bool k=0;
        lin1=duyao;
        lin2=jieyao;
        for(j=0;j<b;++j){
            y[j]=0;
            x[j]=0;
        }
        for(j=0;j<c;++j){
            scanf("%d%d%d",&d,&e,&f);
            if(e>b||f>b||e<=0||f<=0){
                k=1;
                break;
            }
            if(d==0){//langrensharen
                if(shenfen[e-1]!=1||x[f-1]==1||e==f||x[e-1]==1||w[e-1]==1||w[f-1]==1||y[e-1]==1){
                    k=1;
                    break;
                }
                siwang++;
                y[e-1]=1;
                x[f-1]=1;
                if(shenfen[f-1]==3){
                    y[f-1]=2;
                    lieren++;
                }
            }
            else if(d==1){//duyao
                if(shenfen[e-1]!=4||x[f-1]==1||e==f||x[e-1]==1||w[e-1]==1||w[f-1]==1||y[e-1]==1||duyao[e-1]==1){
                    k=1;
                    break;
                }
                siwang++;
                y[e-1]=1;
                x[f-1]=1;
                duyao[e-1]=1;
                if(shenfen[f-1]==3){
                    y[f-1]=2;
                    lieren++;
                }
            }
            else if(d==2){//jieyao
                if(shenfen[e-1]!=4||x[f-1]!=1||w[e-1]==1||w[f-1]==1||y[e-1]==1||jieyao[e-1]==1){
                    k=1;
                    break;
                }
                else if(x[e-1]==1&&e!=f){
                    k=1;
                    break;
                }
                else if(x[e-1]==0&&e==f){
                    k=1;
                    break;
                }
                jieyao[e-1]=1;
                x[f-1]=0;
                y[e-1]=1;
                siwang--;
                if(y[f-1]==2&&shenfen[f-1]==3){
                    y[f-1]=0;
                    lieren--;
                }
            }
            else{//lieren
                if(shenfen[e-1]!=3||x[f-1]==1||e==f||x[e-1]!=1||w[e-1]==1||w[f-1]==1||y[e-1]!=2){
                    k=1;
                    break;
                }
                siwang++;
                y[e-1]=0;
                x[f-1]=1;
                lieren--;
                if(shenfen[f-1]==3){
                    y[f-1]=2;
                    lieren++;
                }
            }
        }
        if(k||lieren!=0){
            printf("Wrong\n");
            duyao=lin1;
            jieyao=lin2;
        }
        else if(siwang==0){
            printf("Safe\n");
        }
        else{
            printf("%d ",siwang);
            for(j=0;j<b;++j){
                if(x[j]==1){
                    printf("%d ",j+1);
                    w[j]=1;
                }
            }
            putchar(10);
        }
    }
    return 0;
}
2025/1/21 23:46
加载中...