CBnb2VzIHdpdGggdGhlIG1hcCBhYm92ZS48L3A+CjxwPlRoZSBvdXRwdXQgaXMgb25lIGludGVnZXIgcGVyIGxpbmUgZm9yIGVhY2ggZGF0YSBzZXQ6IHRoZSBtaW5pbXVtIGNvc3QgaW4gYWFjbXMgcGVyIG1vbnRoIHRvIG1haW50YWluIGEgcm9hZCBzeXN0ZW0gdGhhdCBjb25uZWN0IGFsbCB0aGUgdmlsbGFnZXMuIENhdXRpb246IEEgYnJ1dGUgZm9yY2Ugc29sdXRpb24gdGhhdAogZXhhbWluZXMgZXZlcnkgcG9zc2libGUgc2V0IG9mIHJvYWRzIHdpbGwgbm90IGZpbmlzaCB3aXRoaW4gdGhlIG9uZSBtaW51dGUgdGltZSBsaW1pdC48L3A+CjxwPjxicj4KPHN0cm9uZz5TYW1wbGUgSW5wdXQ8L3N0cm9uZz48L3A+CjxwPjk8YnI+CkEgMiBCIDEyIEkgMjU8YnI+CkIgMyBDIDEwIEggNDAgSSA4PGJyPgpDIDIgRCAxOCBHIDU1PGJyPgpEIDEgRSA0NDxicj4KRSAyIEYgNjAgRyAzODxicj4KRiAwPGJyPgpHIDEgSCAzNTxicj4KSCAxIEkgMzU8YnI+CjM8YnI+CkEgMiBCIDEwIEMgNDA8YnI+CkIgMSBDIDIwPGJyPgowPGJyPgo8L3A+CjxwPjxicj4KPHN0cm9uZz5TYW1wbGUgT3V0cHV0PC9zdHJvbmc+PC9wPgo8cD4yMTY8YnI+CjMwPGJyPgo8L3A+Cjxicj4KCjxicj4KPHA+t9bO9qO6tL/H89fu0KHJ+rPJyvejrNei0uLK5MjrtcS0psDtoaM8L3A+CjxwPrT6wuujujwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#include
#include
#include
#include
#include
#include
using namespace std; #define maxn 30 #define maxm 80 int parent[maxn]; int cnt, ans; struct edge { int u, v, w; }EG[maxm]; bool cmp(edge a, edge b) { return a.w < b.w; } int Find(int x) { if(parent[x] == -1) return x; return Find(parent[x]); } void Kruskal() { ans = 0; memset(parent, -1, sizeof(parent)); sort(EG, EG+cnt, cmp); for(int i = 0; i < cnt; i++) { int t1 = Find(EG[i].u), t2 = Find(EG[i].v); if(t1 != t2) { ans += EG[i].w; parent[t1] = t2; } } } int main() { int n, k, d; char x, y; while(cin >> n && n) { cnt = 0; for(int i = 1; i < n; i++) { //scanf("%c%d", &x, &k); cin >> x >> k; while(k--) { //scanf("%c%d", &y, &d); cin >> y >> d; EG[cnt].u = x-'A'+1; EG[cnt].v = y-'A'+1; EG[cnt].w = d; cnt++; } } Kruskal(); printf("%d\n", ans); } return 0; }
|