思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes.

此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes

     (2) 输入数据可能并不是连通图,有可能一开始不连通,所以最后一定要判断其连通子图个数是不是1

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<cmath>
 5 #include<set>
 6 #include<algorithm>
 7 #include<cstdio>
 8 #include<map>
 9 #include<cstring>
10
11 using namespace std;
12
13 int Tree[100100];
14
15 int findRoot(int x)
16 {
17     if(Tree[x] == -1)
18         return x;
19     int tmp = findRoot(Tree[x]);
20     Tree[x] = tmp;
21     return tmp;
22 }
23
24 int main()
25 {
26     int a, b;
27     set<int> Set;    // 使用Set保存图中的所有顶点编号
28     for(int i = 0; i <= 100000; ++i)
29         Tree[i] = -1;
30
31     int rimCnt = 0;
32     while(cin >> a >> b)
33     {
34         if(a == -1 && b == -1)
35             break;
36
37         if(a == 0 && b == 0)
38         {
39             if(rimCnt == 0)        // 只有输入一组数据0 0的时候,应该输出Yes
40             {
41                 cout << "Yes" << endl;
42                 continue;
43             }
44             int Vcnt = Set.size();    // 顶点计数
45             int Scnt = 0;            // 图中的连通子图(集合)个数
46             for(set<int>::iterator iter = Set.begin(); iter != Set.end(); ++iter)
47             {
48                 if(Tree[*iter] == -1)
49                 {
50                     Scnt++;
51                 }
52             }
53
54             // 当图中的集合只有一个并且总边数等于顶点数-1的时候,输出Yes
55             if(Scnt == 1 && rimCnt == Vcnt - 1)
56             {
57                 cout << "Yes" << endl;
58             }
59             else
60             {
61                 cout << "No" << endl;
62             }
63
64             for(int i = 0; i <= 100000; ++i)
65                 Tree[i] = -1;
66             Set.clear();    // 清空集合
67             rimCnt = 0;     // 边数置零
68             continue;
69         }
70         else
71         {
72             rimCnt++;    // 边计数
73             Set.insert(a);
74             Set.insert(b);
75             int ra = findRoot(a);
76             int rb = findRoot(b);
77             if(ra != rb)
78             {
79                 Tree[ra] = rb;
80             }
81         }
82
83     }
84
85     return 0;
86 }

转载于:https://www.cnblogs.com/FengZeng666/p/11398225.html

小希的迷宫 HDU - 1272 (并查集)相关推荐

  1. 小希的迷宫 HDU - 1272---并查集+思维

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

  2. hdu 5606(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5606 解题思路: 这题实际上是要找一些连通的节点,使得边上的权值都为0. 很明显,首先把权值为0的边都 ...

  3. HDU 5441并查集 by cyl

    HDU 5441 题意: ​ 杰克喜欢旅游,从城市a到城市b是他最喜欢的,现在有n个城市m个路. ​ 当杰克在从城市a到城市b 的时候需要坐车,但是需要有等待时间t,他无法忍受超过x 的等待时间. ​ ...

  4. hdu 1232 并查集

    并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了.以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定.不分享出来真是对不起party了.(party:我靠,关我嘛事啊?我跟你很熟么?) ...

  5. hdu 4907(并查集)

    Task schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pr ...

  6. hdu 2473(并查集+删除操作)

    解题思路:这道题有并查集的删除操作,如果直接对这一棵树进行删除节点操作肯定是很困难的.所以可以建立虚拟节点,只要有一个节点要被删除,就直接把它投影到虚拟节点上,即用这个虚拟节点来代替我们要删除的节点. ...

  7. hdu 3172(并查集+hash)

    解题思路:典型的并查集,只是每个人的名字要转换成数字,可以用map,也可以用字典树,我最开始用的字典树结果爆内存了.. 爆内存: #include<iostream> #include&l ...

  8. hdu 3081(并查集+最大流)

    题目大意: n个男孩n个女孩,女孩选男孩,每个女孩都要选到不同的人 k对女孩有相同选择标准, 女孩每轮都选择没选过的男孩, 问总共能选几轮.解题思路:女孩编号1......n,男孩编号n+1,n+2, ...

  9. 迷宫收集星星 并查集解答

    群里发的来历不明的题目 可使用深搜广搜解决 我试了试并查集 效率不是很高 题目描述 解答 并查集 1 #include <iostream> 2 #include <vector&g ...

最新文章

  1. Apache POI:解决数据库和Excel之间相互转换的烦恼~
  2. RHEL5.3下搭建SSH
  3. kali安装python3.7_Debian服务器之安装Python3.7
  4. C#LeetCode刷题之#933-最近的请求次数(Number of Recent Calls)
  5. springcloud使用feign进行远程服务调用
  6. Python菜鸟入门:day04数字与字符串
  7. 浙江利捷分析报告(0607)
  8. c语言程序设计新教材,《C语言程序设计》教学大纲(新)教材.doc
  9. 【SAP】实施方法论-ASAP
  10. JavaWeb开发——注册登录的表单验证
  11. Mac访问Github加速
  12. FreeMarker下拉列表选中值回显
  13. wpa_supplicant 使用
  14. 第三方app实现微信登录功能
  15. CF 815C 树形背包
  16. 茅台抢购脚本golang版本使用教程
  17. 用uniapp开发打包多端应用完整指南
  18. 什么叫DMZ区?DMZ区有什么作用?应该怎样构建DMZ?
  19. ALPEN阿尔卑斯山时间管理法
  20. 【数学分析】一致连续的一些证明方法

热门文章

  1. 虚拟化实验室推进计算机网络专业实践教学的解决方案(论文体)
  2. 数据结构分析之——图
  3. sql判断null/空缺值
  4. SVM入门(八)松弛变量(转)
  5. Sqlite3 for Linux 可视化工具
  6. C++编程思想:父类函数隐藏
  7. OPenCV学习笔记八-图像的滤波
  8. 中年失业都去做什么_2020年失业是种什么体验?这位吉他手去做了外卖小哥,演出时还穿着工作服...
  9. 浅谈StringBuilder
  10. #17# SCCM管理 - 软件中心 VS 应用程序目录网站点