题意:n个村庄,已知n-1村庄分别到其他村庄修路的费用,求是n个村庄连通的最小费用
分析:这个是最小生成树的题,只不过村庄的编号为A-Z的大写字母,操作比较麻烦,可以将其对应转化为1-26,
这样就与普通的最小生成树题一样了
#include<cstdio> #include<algorithm> using namespace std; int f[50],n,m; struct stu { int a,b,c; }t[300]; int cmp(struct stu x,struct stu y) { return x.c<y.c; } int find(int x) { if(x!=f[x]) f[x]=find(f[x]); return f[x]; } int krus() { int i,k=0,s=0,x,y; for(i=1;i<=m;i++){ x=find(t[i].a); y=find(t[i].b); if(x!=y){ s+=t[i].c; k++; if(k==n-1) break; f[x]=y; } } return s; } int main() { int i,j,s,a; char c,e; while(scanf("%d",&n)!=EOF){ getchar(); if(n==0) break; m=0; j=1; for(i=1;i<=n-1;i++){ scanf("%c%d",&c,&a); getchar(); m+=a; while(a--){ scanf("%c%d",&e,&t[j].c); getchar(); t[j].b=e-64; t[j++].a=c-64; } } for(i=1;i<=n;i++) f[i]=i; sort(t+1,t+1+m,cmp); s=krus(); printf("%d\n",s); } return 0; }
hdu 1301 Jungle Roads,布布扣,bubuko.com
时间: 2024-10-11 21:13:36