CF1095F Make It Connected

Posted skip1978

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1095F Make It Connected相关的知识,希望对你有一定的参考价值。

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

 

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

#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 << 
;
}

 

以上是关于CF1095F Make It Connected的主要内容,如果未能解决你的问题,请参考以下文章

Make It Connected CodeForces - 1095F (建图+最小生成树)

F. Make It Connected

CF1095F——两种贪心解法的内在一致性;kruskal

[CF 1043F] Make It One

CF1342F Make It Ascending

CF1342F Make It Ascending