hdu1301 Jungle Roads

来源:互联网 发布:海口seo 编辑:程序博客网 时间:2024/05/01 02:49

最小生成树。。。

prim


#include <iostream>#include<cstring>#include<cstdlib>using namespace std;#define MAX 1000000int main(){//freopen("in.txt","r",stdin);int g[30][30];int n;int cost[30];int vis[30];while(scanf("%d",&n)==1&&n){for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)g[i][j]=MAX;for(int i=0;i<n-1;i++){getchar();char ch;int m;scanf(" %c %d",&ch,&m);for(int j=0;j<m;j++){char ch1;int v;scanf(" %c %d",&ch1,&v);if(v<g[ch-'A'][ch1-'A'])g[ch-'A'][ch1-'A']=g[ch1-'A'][ch-'A']=v;}}for(int i=0;i<n;i++){cost[i]=g[0][i];vis[i]=0;}vis[0]=1;cost[0]=0;for(int i=1;i<n;i++){int p,tmp=MAX;for(int j=1;j<n;j++)if(!vis[j]&&tmp>cost[j]){tmp=cost[j];p=j;}vis[p]=1;for(int j=1;j<n;j++)if(!vis[j]&&cost[j]>g[p][j])cost[j]=g[p][j];}int s=0;for(int i=1;i<n;i++)s+=cost[i];printf("%d\n",s);}return 0;}