Problem
【HEOI2014】大工程
Description
国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。
我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。
在两个国家之间建一条新通道需要的代价为树上的最短路径。
现在国家有很多个计划,每个计划都是这样,我们选中了个点,然后在它们两两之间新建条新通道。
现在对于每个计划,我们想知道:
- 这些新通道的代价和
- 这些新通道中代价最小的是多少
- 这些新通道中代价最大的是多少
Input
第一行表示点数。
接下来行,每行两个数表示和之间有一条边。
点从开始标号。接下来一行表示计划数。
对每个计划有行,第一行表示这个计划选中了几个点。
第二行用空格隔开的个互不相同的数表示选了哪个点。
Output
Sample Input
1 | 10 |
Sample Output
1 | 3 3 3 |
HINT
,,保证
Source
鸣谢佚名上传
标签:虚树
DP
Solution
虚树裸题。
不考虑时间复杂度,可以直接对于每次询问树形一遍,统计每条边的贡献,对于每个点记录其到子树中关键点的最长链,并在选中的点上将最长/短的两条到关键点的链拼接即可得到全局最长/短链。这样每次是的,总复杂度。
由于题目中有限制,考虑对每次询问的关键点建立虚树,在虚树上,即可将复杂度降低到线性级别。
Code
1 |
|