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的主要内容,如果未能解决你的问题,请参考以下文章