hihocoder1098最小生成树(kruscal算法)
2015-02-22 21:46
190 查看
kruscal算法描述:
kruscal算法的思路是:最初,把所有节点都看成孤立的集合,将图中所有的边按权重从小到大排序,然后依次遍历这些边,若边的两个端点在两个不同的集合中,则合并这条边的端点所属的两个集合,直到选出n-1条边将图中的所有n个节点都合并到了同一个集合,n-1次合并就选出了n-1条边,由这n-1条边和图上的n哥节点所构成的就是我们需要的该图的最小生成树。
kruscal算法的性能依赖于边的数目,故对于稀疏图的最小生成树问题,采用kruscal算法比较优越。
我的代码:
题目链接:http://hihocoder.com/problemset/problem/1098
kruscal算法的思路是:最初,把所有节点都看成孤立的集合,将图中所有的边按权重从小到大排序,然后依次遍历这些边,若边的两个端点在两个不同的集合中,则合并这条边的端点所属的两个集合,直到选出n-1条边将图中的所有n个节点都合并到了同一个集合,n-1次合并就选出了n-1条边,由这n-1条边和图上的n哥节点所构成的就是我们需要的该图的最小生成树。
kruscal算法的性能依赖于边的数目,故对于稀疏图的最小生成树问题,采用kruscal算法比较优越。
我的代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define MAXN 100005 #define INF 0x7fffffff struct edge { int u, v, w; edge(int _u, int _v, int _w):u(_u),v(_v),w(_w){} bool operator<(const edge &x)const { return w<x.w; } }; vector<edge> e; int n, m; struct unionFindSet { int st[MAXN]; void init() { for(int i=1; i<=n; ++i) st[i] = i; } int findSet(int x) { if(x==st[x]) return x; return st[x] = findSet(st[x]); } void unionSet(int x, int y) { int sx = findSet(x), sy = findSet(y); st[sx] = sy; } }ufs; int kruscal() { sort(e.begin(), e.end()); int ans = 0, cnt = 0; ufs.init(); for(int i=0; i<e.size()&&cnt<n-1; ++i) { int su = ufs.findSet(e[i].u), sv = ufs.findSet(e[i].v); if(su!=sv) { ufs.unionSet(su, sv); ans += e[i].w; } } return ans; } int main() { while(cin>>n>>m) { e.clear(); while(m--) { int u, v, w; cin>>u>>v>>w; e.push_back(edge(u, v, w)); } cout<<kruscal()<<endl; } return 0; }
题目链接:http://hihocoder.com/problemset/problem/1098
相关文章推荐
- 最小生成树之kruscal算法
- zoj1203 Swordfish ——最小生成树入门题_Kruscal算法
- #1098 : 最小生成树二·Kruscal算法
- #1098 : 最小生成树二·Kruscal算法
- hiho一下 第二十七周:最小生成树二·Kruscal算法
- (kruscal12.1.1)POJ 2421 Constructing Roads(使用kruscal算法来生成最小生成树&&计算最小带权路径和)
- 算法基础 - 最小生成树(Kruscal算法)
- hiho 27 最小生成树二·Kruscal算法
- #1098 : 最小生成树二·Kruscal算法
- poj 1861 Network 最小生成树 kruscal算法
- 最小生成树算法---Kruscal算法和Prim算法(入门)
- 最小生成树二·Kruscal算法
- POJ 1789最小生成树(kruscal算法)
- hihoCoder 1098 最小生成树二·Kruscal算法
- hihoCoder#1098 最小生成树二·Kruscal算法
- poj1861&&zoj1542 Network ——最小生成树入门题_Kruscal算法
- poj1679 The Unique MST ——判断最小生成树是否唯一_kruscal算法
- hiho 最小生成树二(Kruscal算法)
- [HihoCoder]#1098 : 最小生成树二·Kruscal算法
- hihoCoder 1098 : 最小生成树二·Kruscal算法