差两个测试点,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;
}