最小生成树裸题,懒得写,直接模板
#include<iostream> #include<vector> #include<cmath> #include<cstdio> #define inf 1<<30 #define maxn 30 using namespace std; int n; vector<int>mapp[maxn]; int vaule[maxn][maxn]; int visit[maxn]; void prim() { int d[maxn]; fill(d,d+maxn,inf); fill(visit,visit+maxn,0); int re=0; d[0]=0; while(1) { int v=-1; for(int i=0;i<n;i++) { if(!visit[i]&&(v==-1||d[i]<d[v])) v=i; } if(v==-1) break; re+=d[v]; visit[v]=1; for(int i=0;i<mapp[v].size();i++) { int x=mapp[v][i]; d[x]=min(d[x],vaule[v][x]); } } cout<<re<<endl; } int main() { while(cin>>n&&n) { char a,b; int m,x,z; for(int i=0;i<maxn;i++) mapp[i].clear(); for(int i=0;i<n-1;i++) { cin>>a>>m; for(int i=0;i<m;i++) { cin>>b>>z; int x=a-'A',y=b-'A'; mapp[x].push_back(y); mapp[y].push_back(x); vaule[x][y]=z; vaule[y][x]=z; } } prim(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/zafkiel_nightmare/article/details/47990243