HDU 1829 A Bug's Life

来源:互联网 发布:淘宝无线网址怎么转换 编辑:程序博客网 时间:2024/05/22 16:58

题意:

n只虫子  m种交配方式  并给出m对交配  问  是否存在基… 0.0


思路:

简单的带权并查集  比POJ上那道食物链基础  而且用二分染色可以水过(由于性别只有两种…)

带权并查集可以利用权值维护不同集合间的“关系”

代码书写时注意getf函数中利用fa[x]更新x和根的关系  merge时注意fy权值利用x、y的权值的计算方法


代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 2010int fa[N],val[N];int n,m,T,t;int getf(int x){    if(x!=fa[x])    {        int tmp=fa[x];        fa[x]=getf(fa[x]);        val[x]=(val[x]+val[tmp])%2;    }    return fa[x];}int main(){    int i,u,v,flag,fu,fv;    scanf("%d",&T);    for(t=1;t<=T;t++)    {        scanf("%d%d",&n,&m);        for(i=1;i<=n;i++)        {            fa[i]=i;            val[i]=0;        }        for(i=1,flag=1;i<=m;i++)        {            scanf("%d%d",&u,&v);            fu=getf(u);            fv=getf(v);            if(fu==fv)            {                if(val[u]==val[v]) flag=0;            }            else            {                fa[fv]=fu;                val[fv]=(val[u]+val[v]+1)%2;            }        }        printf("Scenario #%d:\n",t);        if(flag) printf("No suspicious bugs found!\n");        else printf("Suspicious bugs found!\n");        puts("");    }    return 0;}


0 0
原创粉丝点击