[CF622E] Ants in Leaves 题解
难办的显然是一只蚂蚁被其父结点的蚂蚁卡住。
我们令蚂蚁初始的【既定耗时】为其深度(由于每秒一单位)。
蚂蚁被卡住,就是由于有两只蚂蚁的【既定耗时】相同。
直接模拟显然是不好做的。
换个角度,我们让将要被卡住的蚂蚁晚点出发,这样就可以一路畅通了。
晚多少呢?我们可以将蚂蚁的【既定耗时】从小到大排序,开一个桶表示每只蚂蚁什么时候能到达终点。
本来,每只蚂蚁应该要用等同其深度的时间走到终点。
依次枚举【既定耗时】,如果它在桶中出现过,那么它一定会被卡住。这时,让它的“深度”(即耗时)为在桶中最大的数加一,就是最优的(不用二分,因为是从小到大枚举的)。
这样做,每只蚂蚁自然会延迟一些出发,从而避免了互相卡住。这个贪心也是最优的。
还有一个细节,要在 \(1\) 号结点的所有儿子中跑刚刚的过程,取所有蚂蚁中最大的【既定耗时】作为子树的答案。再在所有的子树答案中取 \(\max\)。
原因就是 \(1\) 号结点可以容纳多只蚂蚁。
瓶颈是排序,时间复杂度 \(O(n \log n)\)。
submission.

浙公网安备 33010602011771号