#include <iostream> #include <cstring> const int MAX=26; const int INF=105; using namespace std; void prim(int matrix[][MAX],int N,int u) { int i,j,k; int min; int mincost=0; int lowcost[MAX]; for(i=0;i<N;i++) lowcost[i]=matrix[u][i]; for(i=1;i<N;i++) { min=INF; for(j=0;j<N;j++) if(lowcost[j] && lowcost[j]<min) { min=lowcost[j]; k=j; } mincost+=min; lowcost[k]=0; for(j=0;j<N;j++) if(lowcost[j] && lowcost[j]>matrix[k][j]) lowcost[j]=matrix[k][j]; } printf("%d/n",mincost); } int main() { int i,j; int N,n; char ch1,ch2; int temp; int matrix[MAX][MAX]; while(cin >> N && N!=0) { for(i=0;i<N;i++) for(j=0;j<N;j++) { if(i==j) matrix[i][j]=0; else matrix[i][j]=INF; } for(i=0;i<N-1;i++) { cin >> ch1 >> n; for(j=0;j<n;j++) { cin >> ch2 >> temp; matrix[ch2-'A'][ch1-'A']=matrix[ch1-'A'][ch2-'A']=temp; } } prim(matrix,N,0); } return 0; } //knowledge: the minmum spanning tree //submit: 2 // 1 for the wrong use of function memset and neglect 'cin' failure // (Attention :the use of input) // 2 AC //Learned: //1.要更熟悉输入:就是输入稍难处理一点 //2.发现了memset()不能将值赋为除0,-1以外的值 //