【HDU1325】Is It A Tree?(并查集基础题)
有以下坑点:
1.结束输入不一定-1,题目中的叙述只是说所有权值都为正值。
2.是否构成一棵树不能只判断是否只有一个根节点,没有环路,而且还需要判断每个节点的入度一定是1,不然就不是一棵树。
(无环路也可用树的性质:结点数 = 边树 + 1 来取代)
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cctype> 5 #include <cmath> 6 #include <string> 7 #include <cstdio> 8 #include <algorithm> 9 #include <numeric> 10 using namespace std; 11 12 const int maxn = 25; 13 14 int father[maxn]; 15 int eage[maxn]; 16 bool vis[maxn], flag = 0; 17 int sum = 0; 18 19 int getFather (int x) { 20 while (father[x] != x) { 21 x = father[x]; 22 } 23 return x; 24 } 25 26 void Union (int p, int q) { 27 int x = getFather (p); 28 int y = getFather (q); 29 if (x != y) { 30 father[y] = x; 31 sum ++; 32 } else { 33 flag = 0; 34 } 35 } 36 37 int main () { 38 int x, y, cur = 0; 39 while (cin >> x >> y) { 40 if (x < 0 && y < 0) break; 41 if (x == 0 && y == 0) { 42 printf("Case %d is a tree.\n", ++ cur); 43 continue; 44 } else { 45 flag = 1; 46 memset(vis, 0, sizeof(vis)); 47 memset(eage, 0, sizeof(eage)); 48 for (int i = 0; i < maxn; ++ i) { 49 father[i] = i; 50 } 51 vis[x] = vis[y] = 1; 52 Union(x, y); 53 eage[y] ++; 54 while (cin >> x >> y) { 55 if (x + y == 0) break; 56 vis[x] = vis[y] = 1; 57 Union(x, y); 58 eage[y] ++; 59 } 60 sort(eage, eage + maxn, greater<int>()); 61 int xx = 0; 62 if (eage[0] > 1) flag = 0; 63 for (int i = 1; i < maxn; ++ i) { 64 if (vis[i] && father[i] == i) { 65 xx ++; 66 if (xx > 1) {flag = 0; break;} 67 } 68 } 69 /*for (int i = 1 ; i < maxn; ++ i) { 70 cout << vis[i] << " " ; 71 }*/ 72 73 if (flag) printf("Case %d is a tree.\n", ++ cur); 74 else printf("Case %d is not a tree.\n", ++ cur); 75 } 76 } 77 return 0; 78 }
转载于:https://www.cnblogs.com/Destiny-Gem/p/3861247.html
【HDU1325】Is It A Tree?(并查集基础题)相关推荐
- 动规(20)-并查集基础题——打击犯罪
[问题描述] 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里 ...
- 动规(16)-并查集基础题——格子游戏
[问题描述] Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为1)为止," ...
- 动规(19)-并查集基础题——城镇道路
Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接 ...
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...
- 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题
18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...
- 战争来临(并查集模板题)
战争来临(并查集模板题) 描述 那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界> B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...
- 并查集模板题(stl 中map的运用)
DongDong认亲戚 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的 ...
- HDU 5606 tree 并查集
tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ansi=size[findset(i)],size表示每个并 ...
- HDU 1325 Is It A Tree? 并查集
点击打开链接 Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
最新文章
- ERP内部顾问与外部顾问的区别
- makeMtk- user 版本编译
- Android轮播图实现图片圆角,Android开发实现图片圆角的方法
- SAP UI5 初学者教程之十二 - 使用 CSS 类对 UI 进行进一步美化试读版
- when is SAP UI5 where is title 'Scaffold in Shell integration test' defined
- Redis高级项目实战,java配置jdk环境时
- JAVA读取本地图片并展示
- python getopt_python 之 分割参数getopt
- Java基础知识总结(超详细整理)
- mb778cn 计算机故障或繁忙,kx mb778cn驱动
- ios7 UITableView底线右移
- 店铺营收未达标,是客单价的问题吗?
- 神经网络(线性神经网络、Delta学习规则)
- 虚拟场景+AR特效,世优科技助力京东手机华为新品发布会MR直播
- C/C++捕获段错误,打印出错的具体位置(精确到哪一行
- “ 试题管理系统”需求分析报告
- IDEA注释模板设置【非常实用】
- 武汉理工大学 计算机学院 李琳,博士学位论文答辩公告-武汉理工大学计算机学院.doc...
- 计算机在盲童音乐教学中的具体应用,盲童钢琴启蒙教学实践探析
- 代理模式-Proxy Pattern