首页 > 其他 > 详细

Kruskal

时间:2019-08-20 23:33:20      阅读:98      评论:0      收藏:0      [点我收藏+]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n , m;
int num , ans;
int fa[5003];
struct node
{
    int u , v , w;
    bool operator < (const node &o) const
    {
        return w < o.w;
    }
}G[400003];
void init()
{
    for(int i = 1; i <= n; i++)
        fa[i] = i;
}
int getf(int x)
{
    if(x == fa[x])
        return x;
    return fa[x] = getf(fa[x]);
}
void Kruskal()
{
    sort(G + 1 , G + m + 1);
    for(int i = 1; i <= m; i++)
    {
        int t1 = getf(G[i].u) , t2 = getf(G[i].v);
        if(t1 == t2)
            continue;
        ans += G[i].w;
        fa[t1] = t2;
        num++;
        if(num == n - 1)
            break;
    }
}
int main()
{
    scanf("%d%d" , &n , &m);
    for(int i = 1; i <= m; i++)
        scanf("%d%d%d" , &G[i].u , &G[i].v , &G[i].w);
    init();
    Kruskal();
    printf("%d" , ans);
    return 0;
}

最小生成树

Kruskal

原文:https://www.cnblogs.com/leo-xy/p/11385990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!