有以下坑点:

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?(并查集基础题)相关推荐

  1. 动规(20)-并查集基础题——打击犯罪

    [问题描述] 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里 ...

  2. 动规(16)-并查集基础题——格子游戏

    [问题描述] Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为1)为止," ...

  3. 动规(19)-并查集基础题——城镇道路

    Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接 ...

  4. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  5. 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题

    18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...

  6. 战争来临(并查集模板题)

    战争来临(并查集模板题) 描述   那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界>   B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...

  7. 并查集模板题(stl 中map的运用)

    DongDong认亲戚 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的 ...

  8. HDU 5606 tree 并查集

    tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ans​i​​=size[findset(i)],size表示每个并 ...

  9. HDU 1325 Is It A Tree? 并查集

    点击打开链接 Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

最新文章

  1. ERP内部顾问与外部顾问的区别
  2. makeMtk- user 版本编译
  3. Android轮播图实现图片圆角,Android开发实现图片圆角的方法
  4. SAP UI5 初学者教程之十二 - 使用 CSS 类对 UI 进行进一步美化试读版
  5. when is SAP UI5 where is title 'Scaffold in Shell integration test' defined
  6. Redis高级项目实战,java配置jdk环境时
  7. JAVA读取本地图片并展示
  8. python getopt_python 之 分割参数getopt
  9. Java基础知识总结(超详细整理)
  10. mb778cn 计算机故障或繁忙,kx mb778cn驱动
  11. ios7 UITableView底线右移
  12. 店铺营收未达标,是客单价的问题吗?
  13. 神经网络(线性神经网络、Delta学习规则)
  14. 虚拟场景+AR特效,世优科技助力京东手机华为新品发布会MR直播
  15. C/C++捕获段错误,打印出错的具体位置(精确到哪一行
  16. “ 试题管理系统”需求分析报告
  17. IDEA注释模板设置【非常实用】
  18. 武汉理工大学 计算机学院 李琳,博士学位论文答辩公告-武汉理工大学计算机学院.doc...
  19. 计算机在盲童音乐教学中的具体应用,盲童钢琴启蒙教学实践探析
  20. 代理模式-Proxy Pattern

热门文章

  1. delphi dxBarManager 的dxBarEdit 输入问题
  2. 用户思维模型,围绕用户核心四大模块,拉新、养熟、成交、裂变循环的效果...
  3. 《Python核心编程》笔记 Python对象
  4. Java, C#, Swift语法对比速查表
  5. Java单例模式简单实现
  6. 如何使用一个库中不存在的函数
  7. 一个自动生成关键字索引页面的比处理文件
  8. 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)
  9. es elasticsearch 几种常见查询场景 二次分组 java读取es的查询json文件
  10. Oracle修改字段的顺序