poj_2492 A Bug's Life

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

分析:

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

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

我的代码:

#include<stdio.h>
#include<string.h>
#define MAXN 2005
int 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了一次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值