并查集--九度1012 & 1109 [路径压缩]
来源:互联网 发布:打印机的端口怎么看 编辑:程序博客网 时间:2024/06/18 08:58
题目【畅通工程】}:http://ac.jobdu.com/problem.php?pid=1012
思路:类似于kruskal算法对数据进行预处理,分成不同集合,集合个数减一就是答案
【1109: 只要判断最后集合个数是否为1即可】
感悟:寻找根节点时,进行了【路径压缩】,即在查找过程中,路径上所有点的父节点都重新赋值,直接指向根节点;这样有效降低搜索树的高度,提高了效率
#include<cstdio>#define maxSize 1005using namespace std;int tree[maxSize];//记录城市的根节点struct Road { //记录已有道路 int a; int b;}road[maxSize];int findRoot(int i) {//寻找根节点 if (-1 == tree[i]) return i; else { int temp = findRoot(tree[i]); tree[i] = temp; //路径压缩 return temp; }}int main() { int n, m; while (scanf("%d", &n) != EOF) { if (0 == n) break; scanf("%d", &m); for (int j = 1; j <= n; j++) tree[j] = -1;//初始化 for (int i = 0; i < m; i++) { scanf("%d %d", &road[i].a, &road[i].b); int a = findRoot(road[i].a); int b = findRoot(road[i].b); if (b != a)//合并为同一集合 tree[a] = b; } int sum = 0; for (int i = 1; i <= n; i++) {//查询共有多少个集合 if (-1 == tree[i]) sum++; } printf("%d\n", sum - 1); //连通sum个版块,需要sum-1条路 } return 0;}
0 0
- 并查集--九度1012 & 1109 [路径压缩]
- 并查集 & 路径压缩
- 【并查集+压缩路径】
- 并查集路径压缩
- 并查集路径压缩
- 并查集路径压缩
- 并查集路径压缩
- 并查集压缩路径
- 并查集 压缩路径
- 并查集路径压缩
- 并查集 ---压缩路径
- 并查集 路径压缩
- 并查集压缩路径
- 并查集压缩路径
- 并查集-路径压缩
- 并查集 路径压缩
- 并查集&&压缩路径
- 并查集(路径压缩)
- leecode 解题总结:268. Missing Number
- pat 1007. Maximum Subsequence Sum (25)
- libsvm-3.22与MATLAB2014a中svmtrian()函数冲突问题的解决
- Android Service的使用方法 音乐播放器实例
- 常见的图片上的描述
- 并查集--九度1012 & 1109 [路径压缩]
- Archlinux作为Openstreetmap服务器滚动更新
- php正则语法--分隔符
- 随手记,一些bug的调试
- 冒泡排序
- 零基础写Java爬虫
- centos7下安装jdk(rpm)
- Treedp贪吃的九头龙详解
- Android服务使用方法