Krusksal

传送门
最小生成树板子题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll mod = 1e9 + 7;
const ll N = 1e5 + 7;
inline ll read()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < 48 || ch > 57)
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= 48 && ch <= 57)
        s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
    return s * w;
}
int n , m;
struct node{
    int u , v;
    ll w;
}edge[N];
bool cmp(node a, node b){
    return a.w < b.w;
}
int fa[N];
int find(int x){
    return fa[x] == x ? x : fa[x] = find(fa[x]);
}
ll kruskal(){
    for(int i = 1 ; i <= n ; i++) fa[i] = i;
    sort(edge + 1, edge + 1 + m , cmp);
    ll ans = 0;
    ll cnt = 0;
    for(int i =  1; i <= m ; i++){
        ll x = find(edge[i].u);
        ll y = find(edge[i].v);
        if(x != y){
            fa[x] = y;
            cnt++;
            ans = max(ans , edge[i].w);
        }
        if(cnt == n - 1) break;
    }
    if(cnt == n - 1) return ans;
    else return -1;
}
int main()
{

    cin>>n>>m;
    for(int i = 1; i <= m ; i++){
        scanf("%lld %lld %lld", &edge[i].u , &edge[i].v , &edge[i].w);
    }
    cout<<kruskal()<<endl;
    return 0;
}
图论 文章被收录于专栏

难顶

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务