您的位置:首页 > Web前端

hdu1829题解(A BUG'S LIFE)简单并查集

2016-07-22 21:45 323 查看
题意应该不难理解,Professor Hopper的猜想是任何bug都只会和异性interaction,如果不能确定猜想是否错误,输出No suspicious bugs found!;

如果猜想一定错误,输出Suspicious bugs found!

再解释一下,如果出现两只bug interaction,说明他们是异性,那么出现冲突(出现同性和同性interaction)的话猜想就一定错误。

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <map>
#include <vector>
#include <string.h>
#include <queue>
#define ms(X) memset(X,0,sizeof(X))
#define msc(X) memset(X,-1,sizeof(X))
typedef long long LL;
using namespace std;
int pre[2010],dsex[2010];
int find(int node)
{
if(pre[node]==node) return node;
return pre[node]=find(pre[node]);
}
bool join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx==fy) return true;
else {if(dsex[fx]!=-1) pre[dsex[fx]]=fy;
if(dsex[fy]!=-1) pre[dsex[fy]]=fx;
dsex[fy]=fx,dsex[fx]=fy;
}
return false;
}
int main(void)
{
int t,ti=0;
cin>>t;
while(++ti<=t)
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) pre[i]=i;msc(dsex);
bool Is_found=false;
while(m--)
{
int a,b;
scanf("%d %d",&a,&b);
Is_found=Is_found||join(a,b);
}
printf("Scenario #%d:\n%suspicious bugs found!\n\n",
ti,Is_found?"S":"No s");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: