首页 > 代码库 > hdu 1829 A Bug's Life 并查集系列
hdu 1829 A Bug's Life 并查集系列
1 #include "cstdio" 2 #include "iostream" 3 #include "cstring" 4 #include "vector" 5 #include "queue" 6 using namespace std; 7 8 #define MAXN 2222 9 int fa[MAXN];10 int rnk[MAXN]; //秩 表示某点与根的距离11 int n, m;12 int a, b;13 bool ok;14 int k,T;15 16 inline void init()17 {18 ok = false;19 for (int i = 0; i <= n; ++i) 20 fa[i] = i, rnk[i] = 0;21 }22 23 int find(int x)24 {25 if (fa[x] == x) return x;26 int t = find(fa[x]);27 rnk[x] = (rnk[fa[x]] + rnk[x]) & 1; //得到x的秩28 fa[x] = t;29 return fa[x];30 }31 32 void merge(int a, int b)33 {34 int x = find(a);35 int y = find(b);36 if (x == y) { //根节点相同37 if (rnk[a] == rnk[b]) //看秩是否相同38 ok = true;39 return;40 }41 fa[x] = y;42 rnk[x] = (rnk[a] + rnk[b] + 1) & 1;//根节点不同,得到该点的秩43 }44 45 void process()46 {47 48 scanf("%d%d",&n,&m);49 init();50 for (int i = 0; i < m; ++i) {51 scanf("%d%d",&a,&b);52 merge(a,b);53 }54 55 printf("Scenario #%d:\n",++k);56 if (ok) printf("Suspicious bugs found!\n");57 else printf("No suspicious bugs found!\n");58 puts("");59 }60 61 int main()62 {63 cin >> T;64 for (int i = 0; i < T; ++ i)65 process();66 //system("pause");67 return 0;68 }
hdu 1829 A Bug's Life 并查集系列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。