您的位置:首页 > Web前端

poj 2492 -- A Bug's Life(并查集)

2013-02-08 00:25 302 查看
判断bug中是否有guy。。。。。。。。。。

用n和n+max表示逻辑正反两反面,两个同一集合内的两个都小于max代表有相同,一个小于一个大于代表不同

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10010;
int pre[2*maxn];
int cnt;
int find(int x)
{
if(pre[x]!=x)
pre[x]=find(pre[x]);
return pre[x];
}
void Union(int x,int y)
{
pre[find(x)]=find(y);
}
int main()
{
int t;
cin>>t;
for(int num=1; num<=t; num++)
{
for(int i=0; i<2*maxn; pre[i++]=i);
int n,flag=1;
cin>>cnt>>n;
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
if(find(a)==find(b))
flag=0;
else
{
Union(a,b+maxn);
Union(a+maxn,b);
}
}
printf("Scenario #%d:\n",num);
if(flag)
printf("No suspicious bugs found!\n\n");
else
printf("Suspicious bugs found!\n\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: