先将输入的边从小到大排序,对于一条边,它一定连接着两个联通块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;
}

  

[ZPG TEST 116] 最小边权和【生成树相关】的更多相关文章

  1. POJ3241 最小曼哈顿距离生成树 - 真有趣哇

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  给你n个坐标, ...

  2. hdu 4786 Fibonacci Tree (最小、最大生成树)

    题意: N个点,M条边.每条边连接两个点u,v,且有一个权值c,c非零即一. 问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数. (fibonacii数=1,2,3,5,8 ...

  3. 【JZOJ5088】【GDOI2017第四轮模拟day2】最小边权和 排序+动态规划

    题面 有一张n个点m条边的有向图,每条边有一个互不相同的边权w,有q个询问,要求你从点a经过不超过c条边到点b,要求经过的边权递增并和尽量小,求出最小的边权和,如果没有合法方案则输出-1. 对于100 ...

  4. poj1639 Picnic Planning 最小度数限制生成树

    题意:若干个人开车要去park聚会,可是park能停的车是有限的,为k.所以这些人要通过先开车到其它人家中,停车,然后拼车去聚会.另外,车的容量是无限的,他们家停车位也是无限的. 求开车总行程最短. ...

  5. hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...

  6. Command Network OpenJ_Bailian - 3436(最小有向生成树模板题)

    链接: http://poj.org/problem?id=3164 题目: Command Network Time Limit: 1000MS   Memory Limit: 131072K To ...

  7. Codeforces 1099 D. Sum in the tree-构造最小点权和有根树 贪心+DFS(Codeforces Round #530 (Div. 2))

    D. Sum in the tree time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. CF888G XOR-MST 最小异或生成树

    CF888G XOR-MST 链接 CF888G 思路 trie上贪心,先左右两边连边,再用一条边的代价连起左右两颗树.因为内部的边一定比跨两棵树的边权笑,显然是对的. 代码自己瞎yy的.启发式合并 ...

  9. 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)

    图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...

随机推荐

  1. 数据库(Mysql)背后的数据结构-学习

    来吧,用这三篇文章夯实对Mysql的理解吧. 关于数据库索引及其优化,更多可参见此文:http://www.cnblogs.com/pkuoliver/archive/2011/08/17/mass- ...

  2. matlab 画图技巧

    基本画图工具:matlab 画图中线型及颜色设置 matlab中坐标轴设置技巧 **Matlab中的坐标轴设置技巧**    axisoff;      %去掉坐标轴  axistight;      ...

  3. Python使用django搭建web开发环境

    安装 Python 去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可. 检测是否安装完成 C:\WINDOWS\sy ...

  4. vue自定义轮播图组件 swiper

    1.banner 组件 components/Banner.vue <!-- 轮播图 组件 --> <template> <div class="swiper- ...

  5. USACO castle

    <pre name="code" class="cpp"><pre>USER: Kevin Samuel [kevin_s1] TASK ...

  6. shuf乱序排列

    如何从文件中随即选取1000行内容呢?我们可以使用shuf命令 shuf [ 其中,shuf会读取file中的内容,并生成乱序的排列,进而使用head命令,取出前1000行

  7. java基础入门-建立能够多client链接的ServerSocket

    承接上一篇文章,今天谈论一下能够多client链接的ServerSocket. 这里面注意涉及到的技术点是: 1.ServerSocket 2.多线程 这次我们分成两个类来实现,先上代码: packa ...

  8. ps -ef | grep

    ps -ef | grep java   查看所有关于java的进程 root     17540     1  0  2009 ?        01:42:27 /usr/java/jdk1.5. ...

  9. Buildroot用户指南【转】

    本文转载自:http://www.voidcn.com/blog/bytxl/article/p-4727302.html 第一章        关于Buildroot Buildroot是一个包含M ...

  10. [TJOI2016&HEOI2016] 排序

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4552 [算法] 首先 , 二分答案x , 将比x小的数看作1,比x大的数看作0 然后 ...