CF1344E Train Tracks

发布时间 2023-06-14 16:25:18作者: PYD1

注意到第二问并没有什么意义:我们只在必须改道的地方改道就不会变差。

那我们自然会好奇哪些时候必须改道,这个是比较显然的:对于一个点 \(u\),倘若在 \(t_0\) 时刻有车往 \(v\) 开,\(t_1\) 时刻有车往 \(w\) 开,并且这两个时刻之间,没有别的开往子树内的列车,那么我们只要在 \((t_0,t_1]\) 内任意分配一个时刻给这次改道操作均可。

倘若我们知道了所有的区间,这个问题可以通过简单贪心解决。

画一画图,可以发现改道操作其实不是很多。事实上这可以通过我们寻找的算法来证明。我们考虑使用启发式合并维护每个节点子树内的列车出发时刻,一个轻儿子内的列车 \(t\) 最多只会带来两次改道操作(一次自己,一次别人)。那么总的改道操作不超过 \(O(n\log n)\) 次。

总复杂度 \(O(n\log^2n)\)