T2 消息传递

更好的阅读体验。

题目:P2018 消息传递

感觉比 T1 难,但是贪心策略没想到很不应该,基本策略想到了就能做了。

首先第一步是想到暴力的做法,我们不妨遍历每一个节点 u,从 u 开始传递信息,如果从 u 传递完所有信息后时间最小,记录下来 u 即可。算法不难实现,跑两遍 DFS 可以实现。O(n^2 \log n) 的时间复杂度,应该能过,但不够优秀。

屏幕截图 2025-08-01 193704

看这棵样例里给的树。

比如从 3 这个节点开始传递信息,第 1 秒时可以传递三个邻点 1,4,8。这里肯定选择先传给 4,因为他的儿子最多。我们要求的是传递完的时间,故让原来最晚结束的最早开始是最好的。这个结论应该很显然,可我怎么想不到?

那么就很好写了,考虑自底向上 DFS,父节点 u 的传递时间取决于他的儿子 v 最晚完成字树内最大传递时间加上 1。即 dp_u = max\{dp_v\}+1

代码好写,贪心 + 树形 dp。

1 个赞