QOJ857 Social Distancing
题意简述
给定一颗 \(n\) 个点的树,和它的两个大小为 \(k\) 的独立集 \(A, B\)。
在一次操作中,可以选择一条树边 \((u, v)\),满足 \(u\in A\land v\notin A\),并使 \(A\leftarrow (A − \{u\})\cup\{v\}\)。同时,操作后 \(A\) 也必须为独立集。
询问 \(A\) 是否能在 \(4n^2\) 次操作内变为 \(B\)。若能则输出方案。
题解
由于操作是双向的,可以考虑从一些能互相转化的独立集中选出一个有特殊意义的作为代表元,将这些独立集对应到这个代表元。这样只需要判断 \(A,B\) 是否能操作到同一个代表元,然后将 \(B\) 的操作反转即可。
考虑将所有点按深度从大到小排序,记为 \(p_1,p_2,\dots,p_n\),记点 \(i\) 的状态 \(s_i\in\{0,1\}\) 表示其是否在集合内。考虑将 \(A,B\) 分别操作为 \((s_{p_1},s_{p_2},\dots,s_{p_n})\) 字典序最大的独立集。
考虑如下贪心过程:依次考虑 \(i=1,2,\dots,n\),判断 \(s_{p_i}\) 是否能通过一些操作变为 \(1\),且不影响所有 \(j<i\) 的 \(s_{p_j}\)。
容易想到以 \(p_i\) 为根做一遍 dfs。对于每个点,处理完后代,判断其是否能往下走一步,若能则往下移动一步。最后判断是否存在一个点,满足能一直移动到根节点即可。
单个节点的操作数不超过 \(2n\)。再加上 \(B\) 的操作,总操作数不超过 \(4n^2\),可以通过此题。时间复杂度 \(\mathcal O(\sum n^2)\)。

浙公网安备 33010602011771号