hdu1829 A Bug's Life 基础种类并查集

  题目的大意可以理解为:A爱B,B爱C ……给出一系列爱恋的关系,推断有没有同性恋。

  思路是把相同性别的归为一个集合(等价类),异性的异性为同性。

  

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=2010;
 7 int f[N], r[N], flag;
 8 void init()
 9 {
10     for(int i=1;i<N;i++)
11     {
12         f[i]=i;
13         r[i]=0;
14     }
15 }
16 int Find(int x)
17 {
18     if(x==f[x]) return x;
19     return f[x]=Find(f[x]);
20 }
21 void Link(int x,int y)
22 {
23     int a=Find(x), b=Find(y);
24     if(a==b) flag=0;
25     else
26     {
27         if(r[x]) f[y]=Find(r[x]);
28         else r[x]=y;
29         if(r[y]) f[x]=Find(r[y]);
30         else r[y]=x;
31     }
32 }
33 int main()
34 {
35     //freopen("test.txt","r",stdin);
36     int x,y,n,m,cas,k;
37     scanf("%d",&cas);
38     for(k=1;k<=cas;k++)
39     {
40         scanf("%d%d",&n,&m);
41         init();
42         flag=1;
43         while(m--)
44         {
45             scanf("%d%d",&x,&y);
46             if(!flag) continue;
47             Link(x,y);
48         }
49         printf("Scenario #%d:\n",k);
50         if(flag) printf("No suspicious bugs found!\n");
51         else printf("Suspicious bugs found!\n");
52         printf("\n");
53     }
54     return 0;
55 }
View Code

 

posted @ 2014-08-27 00:53  pengmq  阅读(200)  评论(0编辑  收藏  举报