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*/