#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+7,INF = 0x3f3f3f3f;
typedef long long ll;
ll ans;
ll n,pre[N],num[N];
struct E{
ll from,to,w;
E(){}
E(ll from,ll to,ll w):from(from),to(to),w(w){}
bool operator < (const E &b) const{
return w<b.w;
}
}e[N];
ll find(int x){
return x==pre[x]?x:pre[x]=find(pre[x]);
}
void read(){
scanf("%lld",&n);
for(int i=1;i<n;i++)
scanf("%lld%lld%lld",&e[i].from,&e[i].to,&e[i].w),ans+=e[i].w;
for(int i=1;i<=n;i++)
pre[i] = i,num[i] = 1;
}
void solve(){
sort(e+1,e+n);
for(int i=1;i<n;i++){
int r1 = find(e[i].from);
int r2 = find(e[i].to);
if(r1!=r2){
ans += (num[r1]*num[r2]-1)*(e[i].w+1);
pre[r1] = r2;
num[r2] += num[r1];
}
}
printf("%lld\n",ans);
}
int main(){
read();
solve();
return 0;
}
一本通1489:构造完全图
C++实现Kruskals并查集算法解决图权值边连接问题
最新推荐文章于 2024-11-20 21:09:00 发布
本文介绍了一段C++代码,使用Kruskals算法和并查集数据结构解决图中边的连接问题,通过合并最小权重的边来优化连通组件的数量,计算最终的最小生成树总权重。
2706

被折叠的 条评论
为什么被折叠?



