http://www.joyoi.cn/problem/tyvj-1391
题目限制
时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目背景
话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道。不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要加入我们了。
题目描述
我们一共有N个OIER打算参加这个泼水节,同时很凑巧的是正好有N个水龙头(至于为什么,我不解释)。N个水龙头之间正好有N-1条小道,并且每个水龙头都可以经过小道到达其他水龙头(这是一棵树,你应该懂的..)。但是OIER门为了迎接中中的挑战,决定修建一些个道路(至于怎么修,秘密~),使得每个水龙头到每个水龙头之间都有一条直接的道路连接(也就是构成一个完全图呗~)。但是OIER门很懒得,并且记性也不好,他们只会去走那N-1条小道,并且希望所有水龙头之间修建的道路,都要大于两个水龙头之前连接的所有小道(小道当然要是最短的了)。所以神COW们,帮那些OIER们计算一下吧,修建的那些道路总长度最短是多少,毕竟修建道路是要破费的~~
输入格式
本题为多组数据~
第一行t,表示有t组测试数据
对于每组数据
第一行N,表示水龙头的个数(当然也是OIER的个数);
2到N行,每行三个整数X,Y,Z;表示水龙头X和水龙头Y有一条长度为Z的小道输出格式
对于每组数据,输出一个整数,表示修建的所有道路总长度的最短值。
提示
第一组数据,在2和3之间修建一条长度为4的道路,是这棵树变成一个完全图,且原来的树依然是这个图的唯一最小生成树.
数据范围
每个测试点最多10组测试数据
50% n<=1500;
100% n<=6000
100% z<=100样例数据
输入样例 #1 输出样例 #1 2 3 1 2 2 1 3 3 4 1 2 3 2 3 4 3 4 5
4 17
题意:
给一颗n节点的树以及其各边权值,求将这棵树补全为完全图后在”使该树为完全图的最小生成树”的限制下所需要添加的的最小边权和。
思路:
由最小生成树的定理:最小生成树中一定包含图中最短的一条路径。所以我们可以贪心的选择已经题目给出的路径们,同时用并查集来模拟Kruscal的建树过程,当两个联通块之间通过题目给出的边进行连接时,为了最后构成完全图,所以我们将两个联通块之间的点两两相连(假设连接)。所以我们总共一共需要添加 联通块1中点的数目*联通块2中点的数目-1条边。那每条边的权值是多少呢?根据上述定理,我们要保证题目给出连接两个联通块的那条边是 连接两个块中最小的边。所以,其他边的权值均为v+1(v为题目给出的那条路的权值),显然这些边的权值不能小于等于v,否则贪心的时候可能贪不到这条边。
还有这里即使v+1等于后面要扩展的边(贪心序列下一条边)的权值也可以,因为两个联通块已经被连接,这些权值V+1的边如果被选,那么图中一定会形成环,通过并查集,我们可以避免产生环的情况,所以这些V+1的边一定不会选则。最后将( 联通块1中点的数目*联通块2中点的数目-1条边)*(v+1)的值累加到最终答案ans中并最后输出ans就可以了。
The end;