Uva 11631 - Dark roads
2013-04-05 17:31
387 查看
并查集,最小生成树 模板题
先算总边和
再减去最小树的总边和即可
1Y
1w的并查集居然也能AC
=.=
先算总边和
再减去最小树的总边和即可
1Y
1w的并查集居然也能AC
=.=
#include<stdio.h> #include<vector> #include<algorithm> #define MAX 200010 struct edge{ int p,q,w; bool operator < (const edge& b)const { return w<b.w; } }; std::vector<edge>L; int ft[MAX]; void in_ft(int n){ int i; for(i=0;i<n;i++)ft[i]=i; } int find(int x){ int t=x,temp; while(ft[x]!=x)x=ft[x]; while(t!=x){ temp=ft[t]; ft[t]=x; t=temp; } return x; } void merge(int root1,int root2){ int fr1=find(root1); int fr2=find(root2); ft[fr1]=fr2; find(root1); find(root2); } int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ if(!m&&!n)break; L.clear(); in_ft(n); int i; int sum=0; for(i=1;i<=m;i++){ int p,q,w; scanf("%d%d%d",&p,&q,&w); L.push_back( (edge){p,q,w} ); sum+=w; } std::sort(L.begin(),L.end()); int res=0; for(i=0;i<L.size();i++){ if( find(L[i].p) != find(L[i].q) ){ merge(L[i].p,L[i].q); res+=L[i].w; } } printf("%d\n",sum-res); } return 0; }
相关文章推荐
- UVa11631 Dark Roads(最小生成树,邻接表)
- uva11631 - Dark roads
- UVa 11631 - Dark roads
- UVa 11631 - Dark roads
- Uva-11631- Dark roads
- UVA11631
- Uva && Sicily练习参考题
- uva10129 Play On words (有向欧拉道路存在性)
- uva 12532 - Interval Product
- uva 808 - Bee Breeding(坐标问题)
- UVa-10010-Where's Waldorf?
- uva 10014 - Simple calculations
- 例题2.1 象棋中的皇后 UVa11538
- UVa 739 - Soundex Indexing
- uva 10406 Cutting tabletops
- uva 10258 Contest Scoreboard
- uva 438 The Circumference of the Circle
- UVA.1639 Candy (期望 高精度)
- UVA 11234 - Expressions
- UVA 216 - Getting in Line