pku 1182的简单版,也是用树形结构来存储相对关系。 对于有些情况,这道题可以在没有输入所有数据前得到答案,我就是因为提前break了,结果一直WA。对于这种多CASE的问题,得把每个CASE的输入好好读完再去处理下面的。 #include <iostream> using namespace std; int parent[2002]; bool relation[2002]; void Union(int a,int b,bool flag) { parent[a]=b; relation[a]=flag; } int main() { bool exist; int scenario,N,K,first,second,first_flag,second_flag; scanf("%d",&scenario); for(int i=0;i<scenario;i++) { scanf("%d%d",&N,&K); for(int j=1;j<=N;j++) { parent[j]=-1; } exist=false; for(int j=0;j<K;j++) { scanf("%d%d",&first,&second); if(exist) continue; first_flag=0; second_flag=0; while(parent[first]>0)//查找代表节点,计算和代表节点的关系。 { if(relation[first]) first_flag++; first=parent[first]; } while(parent[second]>0) { if(relation[second]) second_flag++; second=parent[second]; } if(first!=second) { if((first_flag-second_flag)%2==0) Union(first,second,true); else Union(second,first,false); } else { if((second_flag-first_flag)%2==0) exist=true; } } printf("Scenario #%d:/n",i+1); if(exist) printf("Suspicious bugs found!/n/n"); else printf("No suspicious bugs found!/n/n"); } return 0; }