专题四 · 1008
来源:互联网 发布:apache ab测试百度 编辑:程序博客网 时间:2024/05/07 21:15
代码及解释
#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;}
0 0
- 专题四 · 1008
- 专题四1008
- 专题四1008
- 1008-H专题四
- 专题四 · 1001
- 专题四 · 1002
- 专题四 · 1003
- 专题四 · 1004
- 专题四 · 1006
- 专题四 · 1005
- 专题四 · 1009
- 专题四 · 1010
- 专题四 · 1011
- 杭电专题四1008
- 3G专题四
- LDAP专题(四)
- 专题四1003
- 专题四1003
- Top 67 Log Management Tools
- hadoop集群配置启动及编程
- 关于iOS中的手势识别
- CDMA手机鉴权的过程说明
- UVALive 6697 - Homework Evaluation(dp,字符串匹配得分)
- 专题四 · 1008
- POJ 2559 Largest Rectangle in a Histogram
- iOS --- 如何在Swift项目中使用runtime?
- 为什么不可使用虚假的IMEI或MEID号码?
- ATS 的三种解决方法
- 欢迎使用CSDN-markdown编辑器
- 关注用户体验
- Python Web 6 —— Python操作MongoDB数据库
- 离线安装Cloudera