先将输入的边从小到大排序,对于一条边,它一定连接着两个联通块u与v,那么这条变对于答案的贡献是siz[u] * siz[v] * (边权 + 1) - 1,别问为什么这太显然了,一想就懂。。。

#include <cstdio>
#include <algorithm>
#include <cstring> const int maxn = 20005; int T, n, fa[maxn], fu, fv, siz[maxn];
long long ans;
struct Edge {
int u, v, w;
} a[maxn]; bool cmp(const Edge & aa, const Edge & ss) {
return aa.w < ss.w;
}
int getfa(int aa) {
return fa[aa] == aa? aa: fa[aa] = getfa(fa[aa]);
} int main(void) {
freopen("tree.in", "r", stdin);
freopen("tree.out", "w", stdout);
scanf("%d", &T);
while (T--) {
memset(a, 0, sizeof a);
ans = 0;
scanf("%d", &n);
for (int i = 1; i < n; ++i) {
fa[i] = i;
siz[i] = 1;
scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].w);
}
fa[n] = n;
siz[n] = 1;
std::sort(a + 1, a + n, cmp); for (int i = 1; i < n; ++i) {
fu = getfa(a[i].u);
fv = getfa(a[i].v);
ans += (long long)siz[fu] * (long long)siz[fv] * (long long)(a[i].w + 1) - 1;
fa[fu] = fv;
siz[fv] += siz[fu];
}
printf("%I64d\n", ans);
}
return 0;
}

  

最新文章

  1. Egret 集成第三方库 记录
  2. 备忘:maven 中指定版本
  3. 清除mysql表中数据
  4. windows10和ubuntu16.04双系统下时间不对的问题 ZT
  5. 【小错误】Device eth2 has different MAC address than expected, ignoring.
  6. zookeeper 简介
  7. jquery常用
  8. AOJ673 聪明的输入法(字典树)
  9. Caliburn.Micro(CM) 穿过 Popup 绑定方法
  10. Day06_面向对象第一天
  11. Oracle数据库五种约束
  12. Eddy&#39;s digital Roots(九余数定理)
  13. java通过shield链接Elasticsearch
  14. 详解变量声明加 var 和不加 var 的区别
  15. 面试为什么需要了解JVM
  16. python实现异步调用函数
  17. Python全栈问答小技巧_1
  18. 修改maven项目的编译版本
  19. Java多线程之内存可见性和原子性:Synchronized和Volatile的比较
  20. mysql 变量名称的使用不当的一个错误

热门文章

  1. 一次mysql 优化 (Using temporary ; Using filesort)
  2. vue 获取当前时间 格式YYYY-MM-DD
  3. JavaSE入门学习9:Java基础语法之数组
  4. gbk转utf-8 iconv 编码转换
  5. Android 使用 DownloadManager 管理系统下载任务的方法
  6. HDU 1031.Design T-Shirt【结构体二次排序】【8月21】
  7. iOS 配置支付宝
  8. 树莓派 mongodb 安装&amp;报错处理
  9. 2015/12/29 eclipse应用 输出三角形
  10. IsNumeric 判断字符串是否为数字(使用Val函数实现),这个函数相当于Java的IsNaN函数