九校联考Day2 - 3.管理 题解
九校联考Day2 - 3.管理 题解
题意:n 个员工, m 次操作,操作分为以下三种:
九校联考Day2 - 3.管理 题解
题意
$n$ 个员工, $m$ 次操作,操作分为以下三种:
任命一个员工是另一员工的上司(上司关系不构成还),即构成一个森林的。
在一个员工处产生一个新文件,他的所有上司和他会阅读这份文件。
查询之前的一个文件是否被某个人阅读。
数据范围
测试点编号 | $n$ | $m$ | 特殊性 |
---|---|---|---|
$1-4$ | $n \le 1000$ | $m \le 1000$ | / |
$5-10$ | $n \le 30000$ | $m \le 3000$ | $1$ 号员工无上司,若员工$ i>=2 $ 有直接上司,则一定是员工 $i - 1$ |
$11-16$ | $n \le 150000$ | $m \le 300000$ | 所有操作 1 在操作 2 和 3 前 |
$17 - 20$ | $n \le 150000$ | $m \le 300000$ | / |
5 - 10
因为一个员工 $i$ 的上司一定在 $i$ 前面,因此只要员工 $j$ ($j < i$)满足此时 $i$ 与 $j$ 联通,那 $j$ 一定是 $i$ 的上司,直接并查集处理即可。
11 - 16
这个特殊性使得我们可以提前处理这个森林,用 $\texttt{LCA}$ 或者 $\texttt{dfs}$ 序等方法判断一个员工是否是另一个员工的祖先即可。
满分做法
从上面的部分分做法获得启示,我们考虑在当前两个员工 $x$,$y$ 联通时,因为是树,所以此时这两个员工的相对位置已经确定了,不管再怎么进行操作 1,$x$ 如果是 $y$ 的祖先那他肯定还是,不是也不可能让它变成 $y$ 的祖先。因此,我们要判断在一个时刻 $x$ 是否是 $y$ 的祖先,相当于判断在当前时刻 $x$,$y$ 是否联通,在最后形成的森林中 $x$ 是否是 $y$ 的祖先。因此,我们得到以下的做法:
- 输入所有操作,执行操作 1,处理森林;
- 将所有操作 3 标记在相应的操作 2 上;
- 按时间遍历操作 1 和 2,对于操作 1 执行并查集合并,对于操作 2 遍历所含的 3 ,判断是否联通,以及在预处理的森林中是否是祖先关系。
CODE
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!