#include <bits/stdc++.h>
using namespace std;
int p[2005],v[2005],f;
int fin(int x)
{
if(x==p[x])
return p[x];
int tmp=fin(p[x]);
v[x]^=v[p[x]];//路径压缩时修改节点与祖先的关系
p[x]=tmp;
return p[x];
}
void join(int x,int y)
{
int fx=fin(x);
int fy=fin(y);
if(fx!=fy)
{
p[fx]=fy;//归并后修改关系
if(v[y]==0)
v[fx]=1-v[x];
else
v[fx]=v[x];
}
else//已经有相同祖先
{
if(v[x]==v[y])f=0;
}
}
int main()
{
int T,n,m,a,b;
scanf("%d",&T);
for(int ii=1;ii<=T;ii++)
{
f=1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
p[i]=i;
v[i]=0;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(f)join(a,b);
}
printf("Scenario #%d:\n",ii);
if(f)printf("No suspicious bugs found!\n");
else printf("Suspicious bugs found!\n");
printf("\n");
}
return 0;
}
带权并查集求同性恋
猜你喜欢
转载自blog.csdn.net/qq_42756710/article/details/81232018
今日推荐
周排行