HDU 1865 最小生成树
import java.awt.List;
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static class Node implements Comparable<Node> {
int x, y, val;
Node(int x, int y, int val) {
this.x = x;
this.y = y;
this.val = val;
}
@Override
public int compareTo(Node o) {
// TODO Auto-generated method stub
if(val < o.val) return -1;
else if(o.val < val) return 1;
else return 0;
}
}
static int []fa = new int[110];
public static int find(int x) {
if(fa[x] == x) return x;
fa[x] = find(fa[x]);
return fa[x];
}
public static void init(int m) {
for(int i = 1; i <= m; ++ i)
fa[i] = i;
}
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
while(cin.hasNext()) {
int n = cin.nextInt();
int m = cin.nextInt();
if(n == 0) break;
init(m);
ArrayList<Node>list = new ArrayList<Node>();
for(int i = 0; i < n; ++ i) {
int x = cin.nextInt();
int y = cin.nextInt();
int val = cin.nextInt();
list.add(new Node(x, y, val));
}
Collections.sort(list);
long ans = 0;
int cnt = 0;
for(int i = 0; i < n; ++ i) {
int xx = find(list.get(i).x);
int yy = find(list.get(i).y);
if(xx != yy) {
cnt ++;
fa[xx] = yy;
ans += list.get(i).val;
}
}
if(cnt == m - 1) System.out.println(ans);
else System.out.println("?");
}
}
}
/*
3 3
2 3 4
1 2 1
1 3 2
*/