题目链接:https://vjudge.net/problem/POJ-2492
简单题意:给定一些虫子和他们之间的交往关系,判断它们中是否有同性恋虫
设v[x]=0表示x和par[x]同性,v[x]=1异性,然后用带权并查集做就可以了,算是食物链的简化版(只有两个关系)
#include<cstdio> int t,T,n,m,i,j,x,y,f; int par[2010],v[2010]; int find(int x){ //*带权并查集模板 if (x!=par[x]) { int u=par[x]; par[x]=find(par[x]); v[x]=(v[x]+v[u])%2; } return par[x]; } int main(){ scanf("%d",&t); T=t; while (t--){ scanf("%d%d",&n,&m); f=0; for (i=1;i<=n;i++){ v[i]=0; par[i]=i; } for (i=1;i<=m;i++){ scanf("%d%d",&x,&y); int xx=find(x);int yy=find(y); if (xx==yy){ int d=(v[x]+v[xx]-v[y]+2)%2; //* if (d==0) f=1; //x,y同性 } else { par[xx]=yy; v[xx]=(1+v[y]-v[x])%2; //* } } if (f==1) printf("Scenario #%d: Suspicious bugs found! ",T-t); else printf("Scenario #%d: No suspicious bugs found! ",T-t); } return 0; }