1006
题意:
给出城市以及之间的权值,求最小生成树
思路:prim算法即可
代码:
#include<iostream> #include<algorithm> using namespace std; char p[1000]; int n,k; struct road { char s,e; int w; }r[1000]; bool cmp(road a,road b) { return a.w<b.w; } char find(char x) { return p[x]==x?x:p[x]=find(p[x]); } int kru() { int sum=0; for(int i=0;i<k;i++) { char x=find(r[i].s),y=find(r[i].e); if(x!=y) { p[x]=y; sum+=r[i].w; } } return sum; } int main() { while(cin>>n&&n) { char rs,re; int m,rw; k=0; n--; while(n--) { cin>>rs>>m; while(m--) { cin>>re>>rw; r[k].s=rs; r[k].e=re; r[k].w=rw; k++; } } for(char i='A';i<='Z';i++) p[i]=i; sort(r,r+k,cmp); cout<<kru()<<endl; } return 0; }