【poj 2492】A Bug's Life 题意&题解&代码(C++)

题目链接:
http://poj.org/problem?id=2492
题意:
给出T组数据,每组数据表示有n只虫和m对关系,接下来m行输入(x,y),表示x和y是相爱的异性,若这m对关系中出现了错误,即后给出的关系与之前的关系互相冲突(同性相爱),则输出  Suspicious bugs found! 否则输出  No suspicious bugs found! 
例:
3 3 //三个虫子,三对关系
1 3 //1和3是异性
2 3 //2和3是异性(此时可发现1和2是同性) 
1 2 //这时再说出1和2是异性和前面的关系出现冲突,要输出 Suspicious bugs found!
题解:
还是并查集。。。。同 poj1703
代码:

#include
#include
#include
#include
using namespace std;
int flag,T,n,fa[4005],m;
void init()
{
    for (int i=0;i<=2*n+1;i++)
    fa[i]=i;    
}
int find(int x)
{
    if (fa[x]==x) return x;
    return fa[x]=find(fa[x]);
}
void unio(int x,int y)
{
    fa[find(x)]=find(y);
    return ;
}
int main()
{
    scanf("%d",&T);
    for (int t=1;t<=T;t++)
    {
        scanf("%d%d",&n,&m);
        init();flag=0;
        for (int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if (flag) continue;
            if (find(x)==find(y))
            {flag=1;continue ;}
            unio(x+n,y);
            unio(x,y+n);
        }
                printf("Scenario #%d:\n",t);
        if (flag) 
        printf("Suspicious bugs found!\n");
        else 
        printf("No suspicious bugs found!\n");
        printf("\n");

    }
}

你可能感兴趣的:(oi之路,poj)