zoukankan      html  css  js  c++  java
  • 浅谈最小生成树

      今天真的很闲啊qwq,只好水博来打发时间了,这么简单的知识点,估计也没人会来看吧QAQ

      最小生成树是一种从一张n个点的图中选出n-1条边使得这棵树的最大边权/总权值 最小的树,对于一张图来说,最小生成树可能并不唯一,因为可能有边权相等的边。

      既然要选最小的边来组成这棵树,那么排序肯定是少不了的,按照边权从小到大选择,然后依次选。但是挨着选的话并不一定能得到一颗树,可能会选出开环,并且最后整张图并不一定联通,所以这时候我们用并查集来维护,已经联通的点加入同一个集合,如果当前边连接的2个点已经被之前比它更小的边联通了,那么显然就不需要这条边了。反之,如果没有联通,那么加上这条边并且把这条边连接的2个点加入同一个集合。

      很简单的知识点,就不找例题了,放一下模板吧QAQ

    https://www.luogu.org/problemnew/show/P3366

    #include<algorithm>
    #include<iostream>
    #include<cstdio> 
    using namespace std;
    const int maxn=5005,maxm=200003;
    template<typename T>void read(T &a)
    {
        int f=1,x=0;char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')f=0;ch=getchar();
        } 
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+ch-'0';ch=getchar();
        }
        a=f?x:-x;
    }
    int n,m;
    struct zhw{
        int from,to,val;
    }tu[maxm];
    bool cmp(const zhw&a,const zhw&b)
    {
        return a.val<b.val;
    }
    int ans;
    int fa[maxn];
    int find(int x)
    {
        return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    int main()
    {
        read(n),read(m);
        for(int i=1;i<=m;++i)
        {
            read(tu[i].from),read(tu[i].to),read(tu[i].val);
        }
        for(int i=1;i<=n;++i)fa[i]=i;
        sort(tu+1,tu+m+1,cmp);
        int sum=0;
        for(int i=1;i<=m;++i)//所有的边只找一遍即可
        {
            int x=find(tu[i].from),y=find(tu[i].to);
            if(x!=y)fa[x]=y,sum++,ans+=tu[i].val;
            if(sum==n-1)
            {
                cout<<ans<<endl;
                return 0;
            } 
        } 
        cout<<"orz";
        return 0;
    } 
    知世故而不世故,处江湖而远江湖,才是最成熟的善良
  • 相关阅读:
    注册tomcat为服务
    BootStrap
    Passive DNS
    一个插件平台
    HDU 4394 BFS
    设计模式--组合模式--商品排序案例
    Windows平台编译openssl-0.9.8k库(32位、64位)
    JavaScript之this释疑
    OpenLayers3基础教程——OL3 介绍control
    我的Android进阶之旅------&gt; Android为TextView组件中显示的文本加入背景色
  • 原文地址:https://www.cnblogs.com/yuelian/p/8745225.html
Copyright © 2011-2022 走看看