码迷,mamicode.com
首页 > 其他好文 > 详细

CF1095F Make It Connected

时间:2019-01-31 14:49:06      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:cin   ==   最小生成树   tor   max   main   include   额外   with   

如果没有额外边,最小生成树就是一个以最小权值的点为根的菊花

 

然后把这些边拿出来和额外边跑一边最小生成树就可以了

#include<bits/stdc++.h>
const int maxn = 200100;
typedef long long ll;
int n,m,tot,fa[maxn];
ll a[maxn],ans;
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
struct E{
    int x,y;
    ll v;
    inline int operator < (const E&b)const{return v < b.v;}
}e[maxn<<1];
int main(){
    std::ios::sync_with_stdio(false),std::cin.tie(0);
    std::cin >> n >> m;
    int p=0;a[p]=1e18;
    for(int i=1;i<=n;++i){
        std::cin >> a[i];
        if(a[i]<a[p])p=i;
        fa[i]=i;
    }
    for(int i=1;i<=n;++i)if(i!=p)e[++tot]={i,p,a[i]+a[p]};
    ll v;
    for(int i=1,x,y;i<=m;++i)std::cin >> x >> y >> v,e[++tot]={x,y,v};
    std::sort(e+1,e+tot+1);
    for(int i=1;i<=tot;++i)
        if(find(e[i].x)!=find(e[i].y))
            ans+=e[i].v,fa[find(e[i].x)]=find(e[i].y);
    std::cout << ans << \n;
}

 

CF1095F Make It Connected

标签:cin   ==   最小生成树   tor   max   main   include   额外   with   

原文地址:https://www.cnblogs.com/skip1978/p/10341751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!