时间复杂度mlogm
值得注意的是,在这个板子里并查集的下标是从0开始的,要是直接用的话,记得改下init把右端点带上
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
import java.util.*;
public class Main {
static int fa[];
static int n;
static v a[];
static void init(int n){
for(int i=0;i<n;i++){
fa[i] = i;
}
}
static int get(int x){
if(x == fa[x]) return x;
return fa[x] = get(fa[x]);
}
static void merge(int x,int y){
int newx = get(x);
int newy = get(y);
fa[newx] = newy;
}
static class v implements Comparable<v>{
int from;
int to;
int val;
public v(int from, int to, int val) {
this.from = from;
this.to = to;
this.val = val;
}
@Override
public int compareTo(v o) {
return this.val - o.val;
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNext()){
n = input.nextInt();
//System.out.println(n);
if(n == 0){
break;
}
fa = new int[n];
init(n);
a = new v[n*15+1];
int ans = 0;
int tot = 0;
for(int i=0;i<n-1;i++){
char c;
int num;
c = input.next().charAt(0);
num = input.nextInt();
for(int j=0;j<num;j++){
char cc;
int val;
cc = input.next().charAt(0);
val = input.nextInt();
a[tot++] = new v((int)(c-'A'),(int)(cc-'A'),val);
}
}
Arrays.sort(a,0,tot);
for(int i=0;i<tot;i++){
int x = get(a[i].from);
int y =get(a[i].to);
if(x != y){
ans += a[i].val;
fa[x] = y;
}
}
System.out.println(ans);
}
}
}