HDU 1829 A Bug's Life

Posted Omz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1829 A Bug's Life相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/HDU-1829

题意:

有一堆bug,给出他们的配对关系,问他们之间是否有可能存在同性恋的行为。

思路:

简单并查集,与食物链那题的思路比较像。每一次输入的两个数,定为a和b,每次将a和b+2000合并,将a+2000和b合并,表示他们是异性关系,一旦出现a和b同根,那么就是同性关系。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int par[4005];
 5 
 6 void init(int n)
 7 {
 8     for (int i = 1;i <= n;i++)
 9     {
10         par[i] = i;
11     }
12 }
13 
14 int fin(int x)
15 {
16     if (x == par[x]) return x;
17     else return par[x] = fin(par[x]);
18 }
19 
20 void unit(int x,int y)
21 {
22     x = fin(x);
23     y = fin(y);
24     
25     if (x != y) par[x] = y;
26 }
27 
28 int main()
29 {
30     int t;
31     int cas = 0;
32     scanf("%d",&t);
33     
34     while (t--)
35     {
36         printf("Scenario #%d:\n",++cas);
37         
38         int n,m; 
39         
40         scanf("%d%d",&n,&m); 
41         
42         init(n+2000);
43         
44         bool f = 0;
45         
46         for (int i = 0;i < m;i++)
47         {
48             int a,b;
49             
50             scanf("%d%d",&a,&b);
51             
52             if (fin(a) == fin(b)) f = 1;
53             else
54             {
55                 unit(a+2000,b);
56                 unit(a,b+2000);
57             }
58         }
59         
60         if (f) printf("Suspicious bugs found!\n\n");
61         else printf("No suspicious bugs found!\n\n");
62     } 
63     
64     return 0;
65 }

 

以上是关于HDU 1829 A Bug's Life的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1829 A Bug's Life (种类并查集)

hdu 1829 &amp;poj 2492 A Bug&#39;s Life(推断二分图带权并查集)

hdu1829A Bug's Life(种类并查集)

hdoj 1829 A bug's life 种类并查集

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

HDU1289 A Bug's Life (带权并查集)