算法板子
算法板子

#include<bits/stdc++.h>
using namespace std;
struct Edge{
    int x, y, z;
} edges[200005];
bool operator <(Edge a, Edge b) {
    return a.z < b.z;
}
int fa[100005], n, m, ans, cnt;
int find(int u) {
    if (fa[u] == u) return u;
    return fa[u] = find(fa[u]);
}
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) fa[i] = i;
    for (int i = 1; i <= m; ++i) {
        int x, y, z;
        scanf("%d%d%d", &x, &y, &z);
        edges[i].x = x, edges[i].y = y, edges[i].z = z;
    }
    sort(edges + 1, edges + 1 + m);
    for (int i = 1; i <= m; ++i) {
        int x = find(edges[i].x), y = find(edges[i].y), z = edges[i].z;
        if (x == y) continue;
        
        ans += z;
        fa[x] = y;
        ++cnt;
    }
    if (cnt >= n - 1) {
        cout << ans << endl;
    } else {
        puts("impossible");
    }
    return 0;
}
本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,说不定哪天故事又继续更新了呢。
本文地址:https://qoogle.top/minimum-spanning-tree-by-kruskal/
最后修改日期:2020年8月20日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。