zoukankan      html  css  js  c++  java
  • 【Luogu3366】【模板】最小生成树

    problem

    solution

    codes

    #include<iostream>
    #include<algorithm>
    #define maxn 200020
    using namespace std;
    int n, m;
    struct UndirectedEdge{
        int u, v, w;
        UndirectedEdge(){}
        UndirectedEdge(int u, int v, int w): u(u),v(v),w(w){}
        bool operator < (const UndirectedEdge & other)const{
            return w < other.w;
        }
    }edges[maxn];
    struct UnionFindSet{
        int fa[maxn];
        UnionFindSet(int n){
            for(int i = 1; i <= n; i++)fa[i] = i;
        }
        int find(int x){  return fa[x]==x ? x : fa[x]=find(fa[x]);  }
        void merge(int x, int y){
            int xx = find(x), yy = find(y);
            if(xx != yy)fa[xx] = yy;
        }
    };
    inline int kruskal(){
        int sum = 0,  count = 0;
        UnionFindSet ufs(n);
        std::sort(edges, edges+m);
        for(int i = 1; i <= m; i++){
            if(ufs.find(edges[i].u) != ufs.find(edges[i].v)){
                ufs.merge(edges[i].u,edges[i].v);
                sum += edges[i].w;
                count++;
                if(count == n-1) break;
            }
        }
        return sum;
    }
    
    int main(){
        cin>>n>>m;
        for(int i = 1; i <= m; i++)
            cin>>edges[i].u>>edges[i].v>>edges[i].w;
        cout<<kruskal()<<"
    ";
    }
  • 相关阅读:
    1112评论
    1029 C语言文法
    0909编译原理理解和解释
    复利计算4.0-单元测试
    命令解析程序的编写
    《构建之法》1、2、3章思考与感想
    复利计算4.0
    实验三的分析与总结
    复利计算(更新)
    单、复利计算程序
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444673.html
Copyright © 2011-2022 走看看