zoukankan      html  css  js  c++  java
  • 【个人算法模板】最小生成树

    Kruskal算法求最小生成树

    代码实现

    /*
    f[maxn]:数组存的是father
    Node{}结构体:存放的是边
    */
    
    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 2e5+10;
    
    int f[maxn];
    struct Node{
        int u,v,w;
    }node[maxn];
    int n,m;
    bool cmp(Node a, Node b){
        return a.w < b.w;
    }
    void Init(int n){
        for(int i = 1; i <= n; i++) f[i] = i;
        for(int i = 1; i <= m; i++){
            cin >> node[i].u >> node[i].v >> node[i].w;
        }
        sort(node+1,node+1+m,cmp);
    }
    int find(int x){
        return x==f[x]?x:f[x] = find(f[x]);
    }
    void Kruskal(){
        int sum = 0;
        int cnt = 0;
        for(int i = 1; i <= m; i++){
            int u = find(node[i].u);
            int v = find(node[i].v);
            if(u!=v){
                f[u] = f[v];
                sum += node[i].w;
                cnt++;
            }
            if(cnt==n-1){
                cout<<sum<<endl;
                return ;
            }
        }
    }
    int main(void){
        cin >> n >> m;
        Init(n);
        Kruskal();
        return 0;
    }
    
  • 相关阅读:
    nginx
    mysql
    intelij maven
    redis命令大全
    绑定touch事件后click无效,vue项目解决棒法
    新的用法
    img
    vuedragable
    自己总结
    vuex的项目在id中不能运行
  • 原文地址:https://www.cnblogs.com/AC-AC/p/13941771.html
Copyright © 2011-2022 走看看