算法导论21(用于不相交集合的数据结构)
来源:互联网 发布:ios软件下载 编辑:程序博客网 时间:2024/05/16 07:31
不相交集合数据结构(disjoint-set data structure)即并查集(union-find set)
int p[n],r[n];void MakeSet(int x){ p[x]=x; r[x]=0;}//递归int FindSet(int x){ if(x!=p[x])p[x]=FindSet(p[x]); return p[x];}int FindSet(int x){ return x==p[x]?x:Findset(p[x]);}//非递归int FindSet(int x){ int r=x; while(r!=p[r])r=p[r]; int y; while(x!=p[x]) { y=p[x]; p[x]=r; x=y; }}void Link(int x,int y){ if(r[x]>r[y])p[y]=x; else { p[x]=y; if(r[x]==r[y])++r[y]; }}void Union(int x,int y){ Link(FindSet(x),FindSet(y));}
POJ1611
http://poj.org/problem?id=1611
#include<iostream>using namespace std;const int N=30001;int p[N],r[N]; void MakeSet(int x) { p[x]=x; r[x]=0; } int FindSet(int x) { if(x!=p[x])p[x]=FindSet(p[x]); return p[x]; } void Link(int x,int y) { if(r[x]>r[y])p[y]=x; else { p[x]=y; if(r[x]==r[y])++r[y]; } } void Union(int x,int y) { Link(FindSet(x),FindSet(y)); } int main(){int n,m,k,firstStu,stu,sum;while(cin>>n>>m&&(m||n)){for(int i=0;i<n;++i)MakeSet(i);for(int i=0;i<m;++i){cin>>k;if(k>=1)cin>>firstStu;{for(int j=1;j<k;++j){cin>>stu;Union(firstStu,stu);}}}sum=1;for(int i=1;i<n;++i){if(FindSet(i)==FindSet(0))++sum;}cout<<sum<<endl;}return 0;}
POJ2524
http://poj.org/problem?id=2524
#include<iostream>using namespace std;const int N=50001;int p[N],r[N]; void MakeSet(int x) { p[x]=x; r[x]=0; } int FindSet(int x) { if(x!=p[x])p[x]=FindSet(p[x]); return p[x]; } void Link(int x,int y) { if(r[x]>r[y])p[y]=x; else { p[x]=y; if(r[x]==r[y])++r[y]; } } void Union(int x,int y) { Link(FindSet(x),FindSet(y)); } int main(){ int n,m,first,second,sum,num=1; while(cin>>n>>m&&(m||n)) { for(int i=1;i<=n;++i)MakeSet(i); for(int i=0;i<m;++i) { cin>>first>>second; Union(first,second); } sum=0; for(int i=1;i<=n;++i) { if(i==FindSet(i))++sum; } cout<<"Case "<<num++<<": "<<sum<<endl; } return 0;}
0 0
- 算法导论21(用于不相交集合的数据结构)
- 算法导论笔记:21用于不相交集合的数据结构
- 用于不相交集合的数据结构(算法导论第21章-并查集)
- 算法导论之用于不相交集合的数据结构
- 算法导论用于不相交集合的数据结构
- 算法导论代码 第21章 用于不相交集合的数据结构
- 算法导论 第21章 用于不相交集合的数据结构
- 算法导论习题解-第21章用于不相交集合的数据结构
- 算法导论 第21章 用于不相交集合的数据结构
- 《算法导论》第21章 用于不相交集合的数据结构 个人笔记
- [算法导论读书笔记]用于不相交集合的数据结构(并查集)
- 算法导论学习笔记(15)——用于不相交集合的数据结构
- 算法导论学习笔记-第二十一章-用于不相交集合的数据结构
- 算法导论 第二十一章:不相交集合的数据结构
- 用于不相交集合的数据结构
- 第21章:用于不相交集合的数据结构
- 用于不相交集合的数据结构(并查集)
- 第二十一章 用于不相交集合的数据结构
- POJ2431 Expedition
- 无指定协议名时,浏览器对URL的解析
- nodejs学习笔记
- Mongodb使用
- SUSE 11中安装gcc开发环境
- 算法导论21(用于不相交集合的数据结构)
- 还是畅通工程(并查集+最小生成树)
- 数据结构 第四章 字符串和多维数组
- 引导滤波
- NYoj-16-矩形嵌套-dp
- 博弈(各类取石子)
- 使用JVM TI技术插装字节码,实现Java代码执行控监Agent
- 软考——计算机体系结构
- 【数据结构与算法】【排序】直接插入排序的代码实现