算法-并查集
来源:互联网 发布:幻影粒子软件 编辑:程序博客网 时间:2024/06/05 00:00
并查集Union Find
- 简单地数据结构
- 很实用的数据结构
UF
class UF{public: explicit UF(int number); int find(int x); bool connected(int x, int y); void unions(int x, int y);private: vector<int> id; vector<int> rank;}UF::UF(int number){ id.resize(number); iota(id.begin(),id.end(),0); rank.resize(number,1);}int UF::find(int x){ while(id[x]!=x) x=find(id[x]); return id[x];}//iterative/*int UF::find(int x){ while(id[x]!=x){ id[x]=id[id[x]]; x=id[x]; } return id[x];}*/bool UF:: connected(int x,int y){ return find(x)==find(y);}void UF::unions(int x, int y){ int root1=find(x); int root2=find(y); if(root1==root2) return; if(rank[root1]<rank[root2]){ id[root1]=root2; rank[root2]+=rank[root1]; }else{ id[root2]=id[root1]; rank[root1]+=rank[root2]; } }
Number of Connected Components in an Undirected Graph
- 并查集的直接应用
int countComponents(int n,vector<pair<int, int>>& edges){ int cnt=0; UF(n); for(auto edge:edges) unions(edge.first,edge.second); for(int i=0;i<n;i++) if(id[i]==i) cnt++; return cnt;}
Graph Valid Tree
- 考察一:无环图
- 考察二:树的边的个数edges=vertices-1
bool ValidTree(int n, vector<pair<int, int>>& edges){ if(edges.empty() || edges.size()!=n-1) return false; UF(n); for(auto edge:edges){ int x=find(edge.first); int y=find(edge.second); if(x==y) return false; id[x]=y; } return true;}
0 0
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- 算法-并查集
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- Kruskal算法 (并查集)
- 并查集算法小结
- Android APK加壳技术方案【1】
- mysql use mysql hang
- HTML标签marquee实现滚动效果
- fsl OMXMaster解码
- WAN
- 算法-并查集
- openstack API 创建虚拟机快照备份对应image
- Genymotion这段时间被强了,
- 韩顺平 javascript教学视频_学习笔记34_js正则表达式详解
- 写在前面
- 编译器默认生成的函数
- Java中的StringTokenizer类的使用方法
- BUG管理办法
- android开发NDK环境配置