想看更多的解题报告: http://iyenn.com/rec/1824570.html
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:给出N条虫子,然后a和b交配,给出M对a和b后问
有没有同性恋的虫子(题目意思太BT了)
具体参考poj1703
http://blog.csdn.net/wangjian8006/article/details/7846279
在poj1703做的处理就是每得到一对虫子就判断下他们是否在同一个集合,并且他们的性别是否相同,如果相同则有同性恋,后面就算输入数据也不用做处理了,否则就一直处理下去
- /*
- Memory 144K
- Time 750MS
- */
-
- #include
- #define MAXV 2010
-
- int flag,m,n,ans[MAXV],tree[MAXV];
-
- void init(){
- int i;
- for(i=1;i<=n;i++){
- ans[i]=0;
- tree[i]=i;
- }
- flag=1;
- }
-
- int find(int x){
- int rt;
- if(x!=tree[x]){
- rt=find(tree[x]);
- ans[x]=ans[x]^ans[tree[x]];
- return tree[x]=rt;
- }
- return x;
- }
-
- void TUnion(int x,int y){
- int fx,fy;
- fx=find(x);
- fy=find(y);
- if(fx==fy)
- flag=ans[x]^ans[y];
- else{
- tree[fx]=fy;
- ans[fx]=~(ans[x]^ans[y]);
- }
- }
-
- int main(){
- int i,j,t,a,b;
- scanf("%d",&t);
- for(j=1;j<=t;j++){
- scanf("%d%d",&n,&m);
- init();
- for(i=1;i<=m;i++){
- scanf("%d%d",&a,&b);
- if(flag){
- TUnion(a,b);
- }
- }
- printf("Scenario #%d:\n",j);
- if(flag)
- printf("No suspicious bugs found!\n\n");
- else
- printf("Suspicious bugs found!\n\n");
- }
- return 0;
- }
评论记录:
回复评论: