HDU1272_并查集
#include #include using namespace std; const int MAX=100005; int pre[MAX]; int visited[MAX]; int find(int x) { int r, j; r = x; while(pre[r] != r) { r = pre[r]; } while(pre[x] != r) //优化{ j = pre[x];//从底部,一个一个判断上去,如果有一个父节点不是根节点,那么就将它放在根节点上pre[x] = r; x = j;} return r; } //int find(int x) //{ // // int r=x; // // while(pre[r]!=r) // // r=pre[r]; // // return r; //} //void merge(int x,int y) //{ // // int fx,fy; // // fx=find(x); // // fy=find(y); // // if(fx!=fy) // // pre[fx]=fy; //}int main(void) {int n, m, f1, f2;while(scanf("%d%d", &n,&m)==2){memset(visited,0,sizeof(visited));for(int i = 1; i < MAX; i++) pre[i] = i;if (n == -1 && m == -1 )break;if (n == 0 && m == 0 ){ printf("Yes\n");continue;}f1 = find(n); f2 = find(m); pre[f1]=f2;visited[n]=visited[m]=1;int minn=200005,maxn=0,flag=0;if ( n< minn ) minn = n; //找到输入 的所有数据中最小的和最大的便于减小最后数组遍历时的复杂度 if ( m < minn ) minn = m;if ( n> maxn ) maxn = n;if ( m > maxn ) maxn = m;while(scanf("%d%d", &n,&m)) { if ( n== 0 && m == 0)break; if ( n< minn ) minn = n; //找到输入 的所有数据中最小的和最大的便于减小最后数组遍历时的复杂度 if ( m < minn ) minn = m;if ( n> maxn ) maxn = n;if ( m > maxn ) maxn = m;visited[n]=visited[m]=1;f1 = find(n); f2 = find(m); if(f1==f2){flag=1;}else{pre[f1]=f2;}} if(flag==1)printf ("No\n");if (flag==0){for (int i = minn; i <= maxn; i++){if ( visited[i] && pre[i] == i )flag++;}if (flag == 1)printf ("Yes\n");elseprintf ("No\n");} } return 0; }
转载于:https://www.cnblogs.com/cchun/archive/2011/11/09/2520177.html
HDU1272_并查集相关推荐
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...
- 1013 Battle Over Cities(并查集解法)
关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...
- 并查集专题练习:好朋友(未完待续)
有空再把题目补上 输入样例1 4 2 1 4 2 3 样例输出1 2 输入样例2 7 5 1 2 2 3 3 1 1 4 5 6 输出样例2 3 解题思路: 1. 这题放在并查集的专题后面,有查找也有 ...
最新文章
- C/C++语言之 日期 时间
- 三维重建13:点云的局部特征总结
- sap.m.SplitApp
- .Net微服务实战之可观测性
- java字符函数_java字符串函数用法汇总
- 用flask部署模型
- css3 transform文字,CSS3 transform 字体模糊问题
- spark学习-62-Spark:Yarn-cluster和Yarn-client区别与联系
- mysql中的索引什么意思_索引是什么意思(数据库中的索引是什么)
- 【Python数据分析】数据预处理1——数据清洗
- Bailian2723 不吉利日期(POJ NOI0113-02)【日期计算】
- C++两个函数可以相互递归吗_通俗讲:数据结构递归思想
- 4.4 VGG CNN、tensorflow实现——python实战
- Tomcat免安装版执行tomcat9.exe闪退
- java一卡通实例代码_java写的简单校园卡管理系统 校园一卡通 - 下载 - 搜珍网
- FastDFS原理概括
- c# 操作word光标
- win7系统下安装LINUX系统教程
- 什么是UEFI启动?
- Linux计算节点怎么关闭,OpenStack 删除无用的计算结点
热门文章
- c语言获取时间并存储,如何在C程序中获取日期和时间值?
- 【必看】Linux 系统的备份恢复
- php float 和double,PHP float 浮点型数据类型
- 费用节省 50%,函数计算 FC 助力分众传媒降本增效
- 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
- 队列顺序结构C/C++实现(数据结构严蔚敏版)
- yii 全选 php,yii2中gridview使用技巧小结(四)——全选等批量操作
- c语言初学者百题大战答案七,C语言百题大战2405how many minutes
- 怎样增加混凝土粘聚性_如何改善中低强度等级混凝土粘聚性? 这篇文章一定要看...
- jsp oracle 环境配置文件,jsp + tomcat 连接Oracle数据实例