您的位置:首页 > Web前端

poj 2492 A Bug's Life

2013-07-16 20:31 330 查看
#include <iostream>
#include <cstdio>
using namespace std;
int set[2005], m[2005];

int find(int x)
{
int t = x;
while (set[t] != t)
t = set[t];
while (set[x] != x)
{
int temp = set[x];
set[x] = t;
x = temp;
}
return t;
}
void merge(int x, int y)
{
int fx = find(x);
int fy = find(y);
if (fx != fy)
set[fx] = fy;
}

int main()
{
int ncase, n, q, a, b, flag;
scanf("%d", &ncase);
for (int k=1; k<=ncase; k++)
{
scanf("%d%d", &n, &q);
for (int i=0; i<=n; i++)
{
set[i] = i;
m[i] = 0;
}
flag = 0;
while (q--)
{
scanf("%d%d", &a, &b);
if (m[a]==0 && m[b]==0)
{
m[a] = b;
m[b] = a;
}
else if (m[a]==0 && m[b]!=0)
{
m[a] = b;
merge(a, m[b]);
}
else if (m[b]==0 && m[a]!=0)
{
m[b] = a;
merge(b, m[a]);
}
else if(m[a]!=0 && m[b]!=0)
{
merge(a, m[b]);
merge(b, m[a]);
}
if( find(a) == find(b) )
flag = 1;
}
cout<<"Scenario #"<<k<<":"<<endl;
if(flag)
cout<<"Suspicious bugs found!"<<endl;
else
cout<<"No suspicious bugs found!"<<endl;
cout<<endl;//
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: