import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
private static int[] parent = new int[100001];
static class Edge {
int a;
int b;
int w;
public Edge(int a, int b, int w) {
this.a = a;
this.b = b;
this.w = w;
}
}
public static void init(int n) {
for (int i = 1; i <= n; ++ i) {
parent[i] = i;
}
}
public static int find(int x) {
if (parent[x] == x) {
return x;
}
return parent[x] = find(parent[x]);
}
public static void merge(int a, int b) {
int p1 = find(a);
int p2 = find(b);
if (p1 != p2) {
parent[p1] = p2;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int m = in.nextInt();
Edge[] edges = new Edge[m];
for (int i = 0; i < m; ++ i) {
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
edges[i] = new Edge(a, b, c);
}
Arrays.sort(edges, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return o1.w - o2.w;
}
});
int res = 0;
int cnt = 0;
init(n);
for (int i = 0; i < m; ++ i) {
int a = edges[i].a;
int b = edges[i].b;
if (find(a) != find(b)) { {
cnt ++;
res += edges[i].w;
merge(a, b);
if (cnt == n - 1) {
break;
}
}
}
if (cnt != n - 1) {
System.out.println("impossible");
} else {
System.out.println(res);
}
}
}
}
Krusckal
猜你喜欢
转载自blog.51cto.com/tianyiya/2541458
今日推荐
周排行