魔法传送
Submit solution
Points:
99
Time limit:
1.0s
Memory limit:
80M
Author:
Problem type
Allowed languages
C, C++
魔法传送
题目描述
有一棵树,树上有 \( n \) 个节点,这些节点通过 \( n-1 \) 条边相连,保证树是连通的。每个节点上都有一个魔法装置。每条边的通行时间为 1 单位时间。
除此之外,每个节点(除了根节点)与根节点之间有一个特殊的传送通道,可以瞬间传送到根节点,且传送花费时间为 0。这个特殊传送通道总共只能使用一次。
假设你从树的根节点(节点 1)出发,想要研究尽可能多的魔法装置。每次研究一个魔法装置的时间就是到达该装置的时间,但不需要额外时间。现在,给定这棵树的结构,求对于所有 \( k \in [1, n] \),如果要恰好研究 \( k \) 个不同的魔法装置并返回到根节点,最少应花费多少时间。
输入格式
- 第一行:一个整数 \( n \),表示树的节点数。
- 接下来 \( n - 1 \) 行,每行包含两个整数 \( u_i, v_i \),表示第 \( i \) 条边连接了节点 \( u_i \) 和 \( v_i \)。
输出格式
对于每个 \( k \in [1, n] \),输出一行整数,表示恰好研究 \( k \) 个魔法装置并返回到根节点的最少时间。
输入输出样例
输入样例 #1
5
1 2
1 3
2 4
2 5
输出样例 #1
0
1
2
4
6
说明
样例解释
- \( k = 1 \):只需要待在魔法装置 1 处,时间为 0。
- \( k = 2 \):从魔法装置 1 到魔法装置 2,返回时间为 1。
- \( k = 3 \):从魔法装置 1 到魔法装置 2,再到魔法装置 4,然后返回,时间为 2。
- \( k = 4 \):从魔法装置 1 到魔法装置 2,再到魔法装置 4,返回魔法装置 1,再去魔法装置 3,返回魔法装置 1,时间为 4。
- \( k = 5 \):从魔法装置 1 到魔法装置 3,再返回魔法装置 1,再去魔法装置 2,再到魔法装置 5,返回魔法装置 2,再去魔法装置 4,最后返回魔法装置 1,时间为 6。
数据范围与约定
| 测试点编号 | 特殊限制 |
|---|---|
| \(1 \sim 2\) | \(n = 3\) |
| \(3 \sim 4\) | \(n = 5\) |
| \(5 \sim 6\) | \(n = 100\) |
| \(7 \sim 8\) | \(n = 1000\) |
| \(9 \sim 10\) | \(u_i = 1, v_i = i + 1\) |
| \(11 \sim 12\) | \(u_i = i, v_i = i + 1\) |
| \(13 \sim 20\) | 无特殊限制 |
对于所有数据,\( 1 \leq n \leq 10^5 \),\( 1 \leq u_i, v_i \leq n \)。
Comments