poj 2492 A Bug's Life(种类并查集)

来源:互联网 发布:知乎 前苏联军事强大 编辑:程序博客网 时间:2024/05/17 08:46

要求根据M对交配关系找出N个虫子中是否存在同性恋/...

和上题一样...T_T

/*Problem ID:I - A Bug's Lifemeaning: 寻找同性恋Analyzing:种类并查集,bug:1,2;1,2.。。T_T*/#include <iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>using namespace std;typedef struct even{int pi,di;}even;#define FOR(i,s,t) for(int i=(s); i<(t); i++)#define BUG puts("here!!!")#define print(x) printf("%d\n",x)#define LL long long#define maxn 2005int pre[maxn],rela[maxn];void init(){    FOR(i,0,maxn){pre[i]=-1;rela[i]=0;}}int find(int x){    int s=x;    if(pre[x]<0) return x;    s=find(pre[x]);    rela[x]=rela[x]^rela[pre[x]];    return pre[x]=s;}void Union (int R1,int R2){    int r1=find(R1);    int r2=find(R2);    if(r1==r2) return;    pre[r1]=r2;    rela[r1]=~(rela[R1]^rela[R2]);}int main(){    int T,N,M;    int a,b,flag,Cas=1;    scanf("%d",&T);    while(T--){        flag=1;        init();        scanf("%d%d",&N,&M);        while(M--){            scanf("%d%d",&a,&b);            if(!flag) continue;            if(find(a)==find(b)){                if(rela[a]==rela[b])                    flag=0;            }            else                Union(a,b);        }        printf("Scenario #%d:\n",Cas++);        if(!flag) printf("Suspicious bugs found!\n");        else printf("No suspicious bugs found!\n");        puts("");    }    return 0;}


原创粉丝点击