Joy OI 走廊泼水节 (最小生成树)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41661919/article/details/84800008

 

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;

猜你喜欢

转载自blog.csdn.net/qq_41661919/article/details/84800008