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 }
康复训练中~欢迎交流!