蒟蒻84分向大佬们求助
查看原帖
蒟蒻84分向大佬们求助
382109
shiqingbaia楼主2022/10/6 15:09

蒟蒻84分

向大佬们求助

#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
using namespace std;

struct Edge{
    int from,to,val;
}e[200010*2];

bool cmp(const Edge &a, const Edge &b){
    return a.val < b.val;
}

int fa[5010];

int find(int x){
    return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
}

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for (int i = 1; i <= m; ++i){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        e[i].from = x;
        e[i].to = y;
        e[i].val = z;
    }
    for (int i = 1; i <= n; i++) fa[i] = i;
    sort(e+1, e + m + 1, cmp);
    long long cnt = 0, ans = 0;
    for (int i = 1; cnt < n; i++){
        int fx = find(e[i].from);
        int fy = find(e[i].to);
        if (fx == fy) continue;
        else{
            ans += e[i].val;
            cnt++;
            fa[fx] = fy;
        }
    }
    printf("%lld",ans);
    return 0;
}
2022/10/6 15:09
加载中...