【21 ZR联赛集训 day18】聚会

【21 ZR联赛集训 day18】聚会

给出一个由小的编号连向大的编号的 DAG,有 \(q\) 次询问,每次给出 \(t\) 和若 \(s\) 个点,表示除这些点之外其他点到 \(t\) 的最大距离。问距离最远的那个结点编号。\(1\le n \le 10^5,1\le m \le 2\times 10^5,\sum s\le 10^5\)

根号分治。

对每个点求出到它距离最远的点是 \(O(n^2)\) 的。可以按照拓扑序 DP,把 \(u\) 转移到所有它能到达的结点,时间复杂度 \(O(n)\)

鉴于我们每次询问会失去一些点,我们可以记录下每个点离它前 \(\sqrt{n}\) 远的点,预处理时间和空间都是 \(n\sqrt{n}\),还是 DP 做,合并儿子转移。

对于每次询问,分两种情况:

  1. \(s>=\sqrt{n}\)
    这种情况不超过 \(\sqrt{n}\) 次,因此暴力搜一遍就好,一次 \(O(n)\)
  2. \(s<\sqrt{n}\)
    直接 \(O(\sqrt{n})\) 扫一遍记录的数组即可。

总时间复杂度和空间复杂度是 \(O(n\sqrt{n})\)

posted @ 2024-09-27 14:08  liyixin  阅读(7)  评论(0编辑  收藏  举报