A Bug’s Life(poj2492)
題意:
有兩個性別的蟲子,問是否有(“a man is ketty”)同性戀。
思路:
轉換爲帶權並查集。
帶權並查集的模板+mod。
AC
#include <iostream>
#include <cstdio>
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
const int maxm=1e6+10;
const int maxn=2e3+10;
const int mod=2;
int a[maxm],b[maxm];
int f[maxn],dis[maxn];
int find(int x)
{
if(x==f[x])return x;
int root=find(f[x]);
dis[x]=(dis[x]+dis[f[x]])%mod;
return f[x]=root;
}
int main()
{
int t,kase=0;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d", &n,&m);
For(i,1,n)f[i]=i,dis[i]=0;
For(i,1,m)scanf("%d%d", &a[i],&b[i]);
int flag=1;
For(i,1,m)
{
int A=find(a[i]);
int B=find(b[i]);
if(A==B)
{
if(dis[a[i]]==dis[b[i]])
{
flag=0;
break;
}
}
else
{
f[A]=B;
dis[A]=(dis[b[i]]-dis[a[i]]+1+mod)%mod;
}
}
printf("Scenario #%d:\n",++kase);
if(flag)printf("No suspicious bugs found!\n");
else printf("Suspicious bugs found!\n");
cout<<'\n';
}
return 0;
}