POJ-1251 Jungle Roads

来源:互联网 发布:hadoop2.7 java开发 编辑:程序博客网 时间:2024/06/06 18:17

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/A

题目大意:给你一个图,N个节点,N-1行每行为N-1号点连的边。输出最小生成树。

解题思路:最小生成树模板,不超过27个点、75条边,读入比较奇怪。

代码:

#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;int n,m,fa[50];struct Edge{int x,y,z;}; Edge e[100];int find(int x){if(fa[x]==x) return x;return fa[x]=find(fa[x]);}bool cmp(const Edge &a,const Edge &b){return a.z<b.z;}int ans=0;void Kruskal(){sort(e+1,e+m+1,cmp);for(int i=1;i<=m;i++){int x=find(e[i].x);int y=find(e[i].y);if(x!=y){ans+=e[i].z;fa[x]=y;}}}int main(){while(scanf("%d",&n),n){for(int i=1;i<=50;i++) fa[i]=i;m=0; for(int i=1;i<n;i++){char s1[2],s2[2];int num,dis;scanf("%s %d",s1,&num);for(int j=0;j<num;j++){scanf("%s %d",s2,&dis);e[++m].x=i;e[m].y=s2[0]-'A'+1;e[m].z=dis;} } ans=0;Kruskal();cout<<ans<<endl;}return 0;}


0 0
原创粉丝点击