HDU1863畅通工程---并查集+最小生成树
2016-05-29 07:57
323 查看
#include<cstdio> #include<algorithm> #define MAX 105 struct edge { int from,to; long long cost; }lm[MAX*MAX]; int N,M,father[MAX],i; bool cmp(edge a,edge b) { return a.cost<b.cost; } void init() { for(int i=1;i<=N;i++) father[i]=i; } int Find(int x) { if(x==father[x])return x; return father[x]=Find(father[x]); } bool Same(int x,int y) { return Find(x)==Find(y); } void unionset(int x,int y) { int u=Find(x),v=Find(y); if(u==v)return; father[u]=v; } long long kruskal() { long long res=0; std::sort(lm+1,lm+1+M,cmp); for(i=1;i<=M;i++) { if(Same(lm[i].from,lm[i].to))continue; unionset(lm[i].from,lm[i].to); res+=lm[i].cost; } return res; } int main() { while(scanf("%d%d",&M,&N)==2) { if(!M)break; init(); for(i=1;i<=M;i++) { scanf("%d%d%lld",&lm[i].from,&lm[i].to,&lm[i].cost); } long long res=kruskal(); for(i=1;i<=N;i++) if(!Same(i,1)) res=-1; if(res==-1) printf("?\n"); else printf("%lld\n",res); } return 0; }
相关文章推荐
- 初学图论-Kahn拓扑排序算法(Kahn's Topological Sort Algorithm)
- 初学图论-Bellman-Ford单源最短路径算法
- 初学图论-DAG单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 封装好的Folyd建图,C++源码
- LCA模板
- 图论学习笔记之一——Floyd算法
- 【LCA】SPOJ QTREE2
- poj 3249 Test for Job 最长路
- HDU 2544
- Timus 1557 Network Attack DFS+各种各种...
- HDU1289 Tarjan-模板题
- Poj2638 网络流+最短路+二分答案
- Aizu1311 分层图最短路 (...大概)
- HDU 3631 Shortest Path
- 根据图论构建可量化评估的产品设计模型-类图(Like Graph)
- 二分图匹配模板
- 最短路径 -- spfa
- POJ2377 Bad Cowtractors