护林员¶
- 参考时间限制:0.5 秒(评测环境与性能)。
- 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间的 2 倍,按 0.5 秒的倍数向上取整。
- 内存限制:512 MB
背景故事¶
森林里的步道连成一棵树,入口处设有护林站,其余地点都是需要巡查的检查点。每个检查点完成一次检查即可。
护林员每天从护林站出发,沿步道巡查后返回。一旦回到护林站,当天的巡查就结束了;同一地点每天最多经过两次。
他希望用最少的天数检查完所有检查点,同时让每一天结束时累计完成检查的地点尽可能多。请帮他安排巡查进度。
(本故事由GPT-6重写)
形式化问题描述¶
给定一棵以顶点 \(1\) 为根、共有 \(n\) 个顶点的无向树。顶点 \(2,\ldots,n\) 各有一个检查点,每个检查点只需完成一次巡查任务。每天选择一条从顶点 \(1\) 出发、最终返回顶点 \(1\) 的树上行走路线;除起点和终点外,路线不能经过顶点 \(1\) ,且每个顶点在当天至多被访问两次。在经过一个顶点时,可完成该顶点尚未完成的任务。
访问次数按路线的顶点序列计数,包括出发和返回时的顶点 \(1\) . 某天已经检查过的顶点,在其他天仍可经过。
首先求完成全部任务所需的最少天数 \(D\) . 随后对每个 \(k=1,\ldots,D\) ,求所有能在 \(D\) 天内完成全部任务的行程安排中,前 \(k\) 天结束时已完成任务数的最大值。可以证明,存在同一个行程安排同时达到这些最大值;只需输出数值,无需输出路线。
输入格式¶
第一行一个整数 \(n\) . 接下来 \(n-1\) 行,每行两个整数 \(u,v\) ,表示树的一条边。
输出格式¶
第一行输出最少天数 \(D\) . 接下来 \(D\) 行,第 \(k\) 行输出前 \(k\) 天结束时最多能累计完成的任务数。
样例 1¶
输入¶
6
1 2
1 3
1 4
1 5
5 6
输出¶
4
2
3
4
5
解释¶
第一天沿 \(1\to5\to6\to5\to1\) 行走,检查顶点 \(5,6\) . 其余三天各检查顶点 \(2,3,4\) 中的一个。
样例 2¶
输入¶
4
1 2
2 3
3 4
输出¶
1
3
数据范围与保证¶
- \(2\le n\le 1\,000\,000\) .
- 输入的 \(n-1\) 条边构成一棵无向树,\(1\le u,v\le n\) .
数据分组¶
| 分值比例 | 额外条件 |
|---|---|
| 30% | \(n\le 10\) |
| 30% | \(n\le 5\,000\) |
| 40% | 无额外条件 |