专题四 · 1008
2016-07-03 22:45
204 查看
代码及解释
#include<stdio.h> #include<string.h> #include<algorithm> // 并查集的应用 // 判断边的两端是否在同一个联通分量里 // 然后在最后合并成一个回路 struct node { int u,v,val; } edge[100005]; int set[10005], circle[10005]; int find_f(int x) { return set[x]==x ? x : set[x] = find_f(set[x]); } bool merge_branch(int x,int y){ int a = find_f(x); int b = find_f(y); if (a == b) { if(circle[a] == -1){ circle[a] = 1; return true; } return false; } else { if(circle[a] == circle[b] && circle[a] == 1) return false; if(circle[a] == 1) set[b] = a; else set[a] = b; return true; } } int cmp(node a,node b){ return a.val > b.val; } int main() { int n, m; while(scanf("%d%d",&n,&m)==2 && n && m){ for(int i=0;i<m;i++) scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].val); for(int i = 0; i < n; ++i){ set[i] = i; circle[i] = -1; } std::sort(edge,edge+m,cmp); int ans = 0; for(int i=0;i<m;i++){ if(merge_branch(edge[i].u, edge[i].v)) ans += edge[i].val; } printf("%d\n",ans); } return 0; }
相关文章推荐
- UVALive 6697 - Homework Evaluation(dp,字符串匹配得分)
- Top 67 Log Management Tools
- CDMA手机鉴权的过程说明
- c语言学习笔记45
- 关于iOS中的手势识别
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- JavaScript indexOf() 方法
- scikit-learn : Logistic Regression