求救

P2024 [NOI2001] 食物链

改了一些已知问题,但好像还不对 ```cpp #include<cstdio> #include<algorithm> using namespace std; int fa[50010]={0},na[50010]={0},dd[50010]={0},cc[50010]={0}; int find(int x) { if(fa[x]==x)return x; return fa[x]=find(fa[x]); } int main() { int n,k,t,x,y,sum=0,i,j; scanf("%d%d",&n,&k); for(i=1;i<=n;i++) {fa[i]=i;na[i]=-1;} for(i=1;i<=k;i++) { scanf("%d%d%d",&t,&x,&y); if(((x>n)||(y>n))||((t==2)&&(x==y)))sum++; else{ if((t==1)&&((na[find(x)]!=-1)||(na[find(y)]!=-1))&&(na[find(x)]!=na[find(y)])) sum++; else if((t==2)&&((na[find(x)]!=-1)||(na[find(y)]!=-1))&&(na[find(y)]!=(na[find(x)]+1)&3)) sum++; else if((t==1)&&((dd[y]==x)||(dd[x]==y)))sum++; else { if(i==1)na[x]=1; na[find(x)]=na[fa[find(x)]];na[find(y)]=na[fa[find(y)]]; if(t==1) { fa[find(x)]=find(y); if(na[find(x)]==-1) na[find(x)]=na[find(y)]; else na[find(y)]=na[find(x)]; if(na[find(y)]!=-1) { if(cc[y]!=0) { na[find(cc[y])]=(na[find(y)]+1)%3; dd[cc[y]]==0;cc[y]=0; } if(dd[y]!=0) { na[find(dd[y])]=(na[find(y)]+2)%3; cc[dd[y]]==0;dd[y]=0; } } if(na[find(x)]!=-1) { if(cc[x]!=0) { na[find(cc[x])]=(na[find(x)]+1)%3; dd[cc[x]]==0;cc[x]=0; } if(dd[x]!=0) { na[find(dd[x])]=(na[find(x)]+2)%3; cc[dd[x]]==0;dd[x]=0; } } } else { if(na[find(y)]==-1&&na[find(x)]!=-1) na[find(y)]=(na[find(x)]+1)%3; else if(na[find(x)]==-1&&na[find(y)]!=-1) na[find(x)]=(na[find(y)]+2)%3; else {cc[x]=y;dd[y]=x;} } } } } printf("%d",sum); return 0; } ```
by ynyxxx @ 2019-06-27 11:08:07


|