并查集_HDU_1325
来源:互联网 发布:网络举报网站 编辑:程序博客网 时间:2024/06/04 17:44
日了狗啊,大水题中有大水坑,还要判断入度没有超过2的
#include<cstdio>const int maxn = 100005;int par[maxn],rot[maxn],flag,vis[maxn],d[maxn];void Init(){ for(int i = 0; i < maxn; i++) { par[i] = i; rot[i] = 0; vis[i] = 0; d[i] = 0; }}int Find(int x){ if(x == par[x]) return x; int t = Find(par[x]); return par[x] = t;}void Union(int x, int y){ x = Find(x); y = Find(y); if(x == y){flag = 1;return;} if(rot[x]>rot[y]) { par[y] = x; } else { par[x] = y; rot[y]++; }}int main(){ int n,m; int num = 0; while(scanf("%d%d",&n,&m) != EOF) { if(n<0 && m<0) break; if(n == 0 && m == 0) { printf("Case %d is a tree.\n",++num); continue; } Init(); flag = 0; vis[n]=vis[m] = 1; d[m]++; Union(n,m); while(scanf("%d%d",&n,&m)) { if(n == 0 && m == 0) break; vis[n]=vis[m] = 1; d[m]++; if(d[m]>=2) flag = 1; Union(n,m); } int cnt = 0; for(int i = 1; i < maxn; i++) if(vis[i] && par[i] == i) cnt++; if(cnt > 1)flag = 1; if(!flag) printf("Case %d is a tree.\n",++num); else printf("Case %d is not a tree.\n",++num); } return 0;}
0 0
- 并查集_HDU_1325
- HDU3938 并查集 并查集
- 并查集(集并查)
- HDU1232 并查集<并>
- 并查集
- 数据结构-并查集
- 并查集
- 并查集!
- 并查集
- 并查集
- 并查集
- 并查集
- 并查集总结
- 并查集学习
- 并查集
- 并查集
- 并查集
- 所谓并查集
- zzuli - 第七届校赛
- 利用SIP将C++封装为Python
- LitePal vs GreenDAO vs SQLOpenHelper 性能比較
- Java第一天整理和第二天
- GDB 调试基本命令
- 并查集_HDU_1325
- 代码重构
- Android---28---Handler、Loop、MessageQueue的工作原理:
- zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h(redis)
- ORA-19808: recovery destination parameter mismatch
- android简单实现音乐播放器
- Elasticsearch之scroll
- 2015.4.20.21.03_数组_2014.4.20.21.03_ JAVA数组的定义及使用方法_0.03
- 黑马程序员——内部类