poj 1251
#include<iostream>
using namespace std;
int data[101][101];
int d[101];//存放当前的最小距离;
int v[101];//标记是否用过;
int sum;
const int maxint=99999;
void shuru(int n)
{
int a,b,c;
char as,nn;
memset(data,0,sizeof(data));
memset(d,0,sizeof(d));
for(int i=1;i<=100;i++)//初始化data[][];
for(int j=1;j<=100;j++)
data[i][j]=maxint;
for(int i=1;i<=n;i++)//初始化d[];使得其值为maxint;
d[i]=maxint;
for(int i=1;i<n;i++)
{
cin>>as>>a;
while(a--)
{cin>>nn>>b;data[as-'A'+1][nn-'A'+1]=b;
data[nn-'A'+1][as-'A'+1]=b;}
}
}
void prim(int n)
{
d[1]=0;sum=0;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
{
int min=maxint;
int k=1;
for(int j=1;j<=n;j++)
{
if(!v[j]&&d[j]<=min)
{
min=d[j];
k=j;
}
}
sum=sum+min;
v[k]=1;
for(int g=1;g<=n;g++)
if(!v[g]&&d[g]>data[k][g])
d[g]=data[k][g];
}
cout<<sum<<endl;
}
int main()
{
int n,m;
while(cin>>n&&n)
{
shuru(n);
prim(n);
}
return 0;
}