题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=209
题目解析: 将所有的点分成两个集合,代码如下:
01.
#include<cstdio>
02.
#include<cstring>
03.
struct
node
04.
{
05.
int
a;
06.
int
b;
07.
}father[10010];
08.
void
init(
int
n)
09.
{
10.
for
(
int
i=1;i<=n;i++)
11.
{
12.
father[i].a=i;
13.
father[i].b=0;
14.
}
15.
}
16.
int
find(
int
x)
17.
{
18.
if
(x==father[x].a)
19.
return
x;
20.
return
find(father[x].a);
21.
}
22.
int
main()
23.
{
24.
int
icase;
25.
int
p=1;
26.
scanf
(
"%d"
,&icase);
27.
while
(icase--)
28.
{
29.
30.
int
m,n;
31.
scanf
(
"%d%d"
,&m,&n);
32.
init(m);
33.
int
c,d;
34.
scanf
(
"%d%d"
,&c,&d);
35.
father[c].b=d;
36.
father[d].b=c;
37.
int
q=0;
38.
n=n-1;
39.
while
(n--)
40.
{
41.
scanf
(
"%d%d"
,&c,&d);
42.
if
(find(c)==find(d))
43.
{
44.
q=1;
45.
break
;
46.
}
47.
else
48.
{
49.
50.
if
(father[c].b==0)
51.
father[c].b=d;
52.
if
(father[d].b==0)
53.
father[d].b=c;
54.
if
(father[c].b!=d)
55.
father[find(d)].a=find(father[c].b);
56.
if
(father[d].b!=c)
57.
father[find(c)].a=find(father[d].b);
58.
}
59.
60.
}
61.
if
(q==0)
62.
{
63.
printf
(
"Scenario #%d:\n"
,p++);
64.
printf
(
"No suspicious bugs found!\n\n"
);
65.
}
66.
else
67.
{
68.
while
(n--)
69.
scanf
(
"%d%d"
,&c,&d);
70.
printf
(
"Scenario #%d:\n"
,p++);
71.
printf
(
"Suspicious bugs found!\n\n"
);
72.
}
73.
}
74.
return
0;
75.
}