AcWing 走廊泼水节 题解
2024-09-07 11:09:45
这道题大致题意就是让一棵树任意两点有连边(也就是完全图),但是补完后最小生成树是一开始的那棵树,问最小加的边权之和是多少。
了解题意后,我们可以想到用Kruskal(废话),当每两个集合合并的时候,除了本身的那条边,一共还会加上\(siz_i * siz_j - 1\)条边,那么每条边的大小也就是边\(i,j\)的长度\(+1\)了,具体的可以看下代码。
代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int l , r , w;
};
node e[6010];
int ans = 0 , n;
int vis[6010][6010] , fa[6010] , siz[6010];
bool cmp(node &x , node &y){
return x.w < y.w;
}
int find(int x){
if(x == fa[x]) return x;
return fa[x] = find(fa[x]);
}
int main(){
int T;
cin >> T;
while(T--){
cin >> n;
for(int i = 1; i <= n - 1; i++) cin >> e[i].l >> e[i].r >> e[i].w;
for(int i = 1; i <= n; i++) fa[i] = i , siz[i] = 1; //多维护一个siz
sort(e + 1 , e + n , cmp);
ans = 0;
for(int i = 1; i <= n - 1; i++){
int x = find(e[i].l) , y = find(e[i].r);
fa[x] = y;
ans += (siz[y] * siz[x] - 1) * (e[i].w + 1);
siz[y] += siz[x];
}
cout << ans << endl;
}
return 0;
}
最新文章
- Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复
- QM模块包含主数据(Master data)和功能(functions)
- iOS 进阶 第十六天(0419)
- Hibernate逍遥游记-第7章 Hibernate的检索策略和检索方式(<;set lazy=";false"; fetch=";join";>;、left join fetch、FetchMode.JOIN、)
- JSON序列化选项
- Android 如何让 app 自行处理 power key M
- Webpack新手入门教程(学习笔记)
- C#实现手机发送验证码
- Gitbucket—快速建立自己的Github
- 手把手带你画一个漂亮蜂窝view Android自定义view
- Python语言学习之Python入门到进阶
- strtok strchr strrchr strchrnul
- 6--Python入门--Python基本运算符
- 【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。
- Linux-非结构化数据同步-Linux下Rsync+Rsync实现非结构化增量差异数据的同步2
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
- Activiti5.16.4部署小记
- vue路由跳转报错解决
- menu 一组 只能选择一个
- SQL Server DDL触发器