并查集(union-find set)hdoj/hdu 1232畅通工程
来源:互联网 发布:python compileall 编辑:程序博客网 时间:2024/06/05 05:44
并查集(union-findset)是一种处理不相交集合(disjointsets)的合并、查找的数据结构,一般可用于表示一个图各连通分支结点的集合,用一棵树表示一个集合,每个集合里的结点都有一个共同的组先,比如当前结点为currentnode,则用while(currentnode!=parents(currentnode)){currentnode=parents(currentnode)}(1),可查找到currentnode的祖先,如果某两个结点有共同的祖先,则两个结点在同一连通分支上。但(1)的timecomplexity达到O(h)(h为树的高度),这显然不是我们想要的,所以可进行路径压缩,就是每次遍历找到的结点都设为它们的祖先的儿子,那么很多结点的查找可达到O(1)的timecomplexity。
以上图为并查集的路径压缩
hdoj/hdu 1232,是很明显的并查集题,就是求并查集集合的个数,初始化tatal=n-1,若读入边为某个集合里的边就tatal--,最后就可求出结果。
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX=1001;
int map[MAX][MAX];
int f[MAX];
int root;
//int totalrun;
/*int find(int h)
{
int x=h;
while(f[x]!=x)
{
x=f[x];
totalrun++;
}
return x;
}*///没有进行路经压缩的算法
int find(int h)
{
//totalrun++;
if(f[h]==h)
{
// cout<<"root "<<h<<endl;
return h;
}
else
{
f[h]=find(f[h]);//路经压缩
return f[h];
}
}
int main()
{
int n,m;
int i;
int from,to;
int total;
while(scanf("%d",&n))
{
//totalrun=0;
if(n==0)
break;
scanf("%d",&m);
for(i=1;i<=n;i++)
{
f[i]=i;
}//初始化每个结点的根结点都是自已本身
total=n-1;
for(i=0;i<m;i++)
{
scanf("%d %d",&from,&to);
int r1,r2;
r1=find(from);//
r2=find(to);//并查集,每个连通分支表示一棵树,每棵树对应一个根结点,find(x),表示查找当前用树表示的集合里的根结点
if(r1!=r2)
{
f[r1]=r2;//如果不在同一连通分支上,就将r1设为r2的儿子,r1的集合就与r2合并,根结点为r2
// f[r2]=r1;
total--;
}//如果from,to有不同的连通分量,就加一条边
}
printf("%d/n",total);
// cout<<"totalrun "<<totalrun<<endl;
}
return 0;
}
- 并查集(union-find set)hdoj/hdu 1232畅通工程
- hdu/hdoj 1232 畅通工程---并查集
- 并查集(Union-Find Set)
- HDOJ 1232 畅通工程 并查集
- hdoj 1232 畅通工程 【并查集】
- HDoj-1232-畅通工程-并查集
- HDOJ 1232 畅通工程(并查集)
- hdoj 1232 畅通工程 【并查集】
- hdoj-1232 畅通工程【并查集】
- hdoj 1232 畅通工程【并查集】
- HDOJ 1232 畅通工程 (并查集)
- HDOJ 1232 畅通工程 (并查集)
- HDOJ 题目1232 畅通工程(并查集)
- HDOJ 1232 畅通工程 (并查集)
- HDOJ 1232 畅通工程 (并查集)
- HDOJ 1232 畅通工程(并查集)
- HDOJ 1232 畅通工程(并查集)
- HDU 1232 畅通工程(并查集Disjoint Set 经典)
- 文本框添加背景图的各种问题
- 获取当前选择的SELECT 项的值
- 用Bat来初始化数据库和目录
- 调用线程必须为 STA,因为许多 UI 组件都需要
- Visual Studio 2008操作技巧
- 并查集(union-find set)hdoj/hdu 1232畅通工程
- 封包与拆包
- DLL编写教程
- Failed to create the requested registry key key: installer error: 1021
- 从零开始学习
- 开发者谈优秀应用的7个必备要素
- 5开发软件配置 --Tomcat无法启动的问题
- gcc使用初步
- 基于ADXL345的 LED摇摇棒原理