hdu 1829 并查集

来源:互联网 发布:python编写自动化脚本 编辑:程序博客网 时间:2024/06/08 22:22
/*题意:题意:有n个人,给你m对关系,问有没有同性恋的。题解:典型并查集 0.0 有点类似于食物链我们定义:fa[i]表示i节点的父节点,bug[i]表示i节点所属性别 0代表男性,1代表女性*/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<queue>using namespace std;const int maxn=2013;int fa[maxn],bug[maxn],n,m,t,flag;int find(int i){    if(fa[i]!=i)    {        int father=fa[i];        fa[i]=find(fa[i]);        bug[i]=(bug[i]+bug[father])%2;    }    return fa[i];}void Union(int u,int v,int fu,int fv,int w){    fa[fu]=fv;    bug[fu]=(bug[u]+bug[v]+w)%2;//公式是推来的}int main(){    int i,j,u,v,cas=1;    scanf("%d",&t);    while(t--)    {        flag=0;        scanf("%d%d",&n,&m);        for(j=0; j<=n; j++)fa[j]=j,bug[j]=0;        for(i=1; i<=m; i++)        {            scanf("%d%d",&u,&v);            if(flag)continue;            int fu=find(u),fv=find(v);            if(fu==fv)            {                if(bug[u]==bug[v])                flag=1;            }            else                Union(u,v,fu,fv,1);        }        printf("Scenario #%d:\n",cas++);        if(flag)puts("Suspicious bugs found!\n");        else puts("No suspicious bugs found!\n");    }    return 0;}/*43 31 22 31 34 21 23 46 65 61 23 44 52 32 67 75 61 24 34 52 36 77 1*/