Krusckal

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);
            }

        }
    }
}

猜你喜欢

转载自blog.51cto.com/tianyiya/2541458
今日推荐