poj_2492 A Bug's Life

来源:互联网 发布:手机淘宝轻量版官网 编辑:程序博客网 时间:2024/04/29 12:28

原题链接:http://poj.org/problem?id=2492

分析:

     题意分析:有N个bug,和M次描述,每次描述表示两个编号的bug互相喜欢。。问没有同性关系。

    算法分析:多开一个sex数组,存对方的性别。这样同一个性别的bug就可以合并了。

我的代码:

#include<stdio.h>#include<string.h>#define MAXN 2005int f[MAXN];int sex[MAXN];int n,m;int find(int i){    if(i==f[i]) return i;    else return f[i]=find(f[i]);}bool flag;void Union(int a,int b){    a=find(a);    b=find(b);    if(a!=b){        f[a]=b;    }}void Solve(int a,int b){   int t1=find(a);   int t2=find(b);   if(sex[t1]==0) sex[t1]=t2;   else{        if(t1==t2) {                flag=true;             //   printf("OK?");        }        else Union(sex[t1],t2);   }   if(sex[t2]==0) sex[t2]=t1;   else{        if(t1==t2) flag=true;        else Union(sex[t2],t1);   }}int main(){    int t;    scanf("%d",&t);    for(int kase=1;kase<=t;kase++){        flag=false; //没发现有同性。        scanf("%d%d",&n,&m);        for(int i=1;i<=n;i++)        {            sex[i]=0; //存对方的性别。            f[i]=i;        }        while(m--){            int a,b;            scanf("%d%d",&a,&b);            if(flag) continue;            Solve(a,b);        }        printf("Scenario #%d:\n",kase);        if(flag)            printf("Suspicious bugs found!\n");        else            printf("No suspicious bugs found!\n");        if(kase!=t) printf("\n");    }    return 0;}

总结:真没从题意中看出每个case之间要空一行。PE了一次。


原创粉丝点击