poj2492 - A Bug's Life

                                    想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
                                     转载请注明出处:
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 <stdio.h>
#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;
}


 

你可能感兴趣的:(tree,BT,2010,bugs)