山东省实验中学 2023 秋提高级友好学校赛前联测 3 T1

生成树 (tree)

题目描述

给定一棵 \(n\) 个节点的树。

定义这棵树的生成完全图为一个 \(n\) 个节点的完全图,图中两点 \(u,v\) 的边权为这两点在树上简单路径上的边权和。

请你求出这张完全图的最小生成树和最大生成树,分别输出两种生成树的边权之和。

输入格式

第一行输入一个正整数 \(n\).

接下来 \(n-1\) 行,每行 \(3\) 个整数 \(u,v,w\) , 表示 \(u,v\) 之间有一条边权为 \(w\) 的边。

输出格式

一行,输出两个整数,分别表示最小生成树和最大生成树的边权和。

样例 #1

样例输入 #1

6
1 2 1
1 3 1
1 4 1
3 5 1
3 6 1

样例输出 #1

5 13

样例 #2

样例输入 #2

8
1 2 716487
2 3 804152
1 4 592006
3 5 613755
1 6 613771
5 7 903188
6 8 122044

样例输出 #2

4365403 21539678

提示

样例解释:

对于第一组样例的最大生成树,一种可行的方法是:

$1 \to 5 (2),2 \to 3 (2),2 \to 5(3) , 2 \to 6(3) ,4 \to 6(3) $ , 边权和为 \(13\).

数据范围:

Subtask0 (25pts) : \(n \le 2000\).

Subtask1 (20pts) : 保证第 \(i\) 条边连接节点 \(i\)\(i+1\).

Subtask2 (20pts) : 保证第 \(i\) 条边连接节点 \(1\)\(i+1\).

Subtask3 (20pts) : $n \le 2 \times10^5 $.

Subtask4 (15pts) : 无特殊限制.

对于 \(100\%\) 的数据,保证 \(1 \le n \le 10^6,1 \le w \le 10^6\),保证输入给定的是一棵树。

本题输入量较大,请注意使用较快的读入方式。

原题

赛时做法:一个点肯定和能到的最远的点合并,因此换根 dp 求每个点能到达的最远的点,合并的细节是并查集判断是否已经联通了, \(O(n \alpha(n))\)

正解:考虑链,发现是把树分成两部分。而对于树,就是求出直径。而对于每个点,求他和两个端点的最远的一个合并即可, \(O(n)\)

posted @ 2023-10-19 19:11  FOX_konata  阅读(43)  评论(0编辑  收藏  举报