最小生成树。。。
prim
#include <iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
#define MAX 1000000
int 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;
}