2013年11月24日 星期日

POJ 2492 A Bug's Life

[DISJIONT SET]



#include<stdio.h>
#include<cstring>
#define BUGN 2000
class Node
{
public:
    int Fat;
    int Rank;
};
Node ptr[2*BUGN];
void Init(int n)
{
    for(int lx=0;lx<2*n;lx++)
        ptr[lx].Fat=lx,ptr[lx].Rank=1;
}
int Getfather(int I)
{
    if(ptr[I].Fat==I)
        return I;
    ptr[I].Fat=Getfather(ptr[I].Fat);
    return ptr[I].Fat;
}
void Union(int a,int b)
{
    int af=Getfather(a);
    int bf=Getfather(b);
    if(ptr[af].Rank>ptr[bf].Rank)
        ptr[bf].Fat=af;
    else if(ptr[af].Rank<ptr[bf].Rank)
        ptr[af].Fat=bf;
    else
    {
        ptr[af].Fat=bf;
        ptr[bf].Rank++;
    }
}
int main()
{
    int T,lx=1;scanf("%d",&T);
    while(T--)
    {
        printf("Scenario #%d:\n",lx);
        int n,s;scanf("%d %d",&n,&s);
        Init(n);
        int pa,pb;
        while(s--)
        {
            scanf("%d %d",&pa,&pb);
            Union(pa-1,n+pb-1);
            Union(pb-1,n+pa-1);
        }
        int Check=true;
        for(int lx=0;(lx<n)&&Check;lx++)
            Check=(Getfather(lx)!=Getfather(n+lx));
        if(!Check)
            printf("Suspicious bugs found!\n\n");
        else
            printf("No suspicious bugs found!\n\n");
        lx++;
    }
    return 0;
}

沒有留言:

張貼留言