/* Author: ACb0y Date: 2010-9-15 Type: MST ProblemId: hdu 1301 Result: 1AC */ #include <iostream> using namespace std; #define inf 999999999 int n, q; int g[30][30]; int vis[30]; int d[30]; void MST_Prim() { int i, j; memset(vis, 0, sizeof(vis)); for (i = 1; i <= n; i++) { d[i] = inf; } d[1] = 0; int ans = 0; for (i = 1; i <= n; i++) { int Min = inf; int pos = -1; for (j = 1; j <= n; j++) if (!vis[j]) { if (d[j] < Min) { Min = d[j]; pos = j; } } vis[pos] = 1; ans += Min; for (j = 1; j <= n; j++) { if (g[pos][j] < d[j]) { d[j] = g[pos][j]; } } } cout << ans << endl; } int main() { int i, j; #ifndef ONLINE_JUDGE freopen("1301.txt", "r", stdin); #endif while (cin >> n) { if (n == 0) break; memset(g, 127, sizeof(g)); for (i = 1; i <= n - 1; i++) { char a; int dis; cin >> a; cin >> q; for (j = 1; j <= q; j++) { cin >> a >> dis; int x, y; x = i; y = a - 'A' + 1; if (g[x][y] > dis) { g[x][y] = g[y][x] = dis; } } } MST_Prim(); } return 0; }