某场模拟赛的T2草稿纸
\(dp_{i, j}\) 表示第一个人走到 \(i\) ,第二个人走到 \(j\) 的方案数量。环上的情况先把每个点按照拓扑序排序,相同环上的点放在一起。
但是有可能在环上游走。
非常抱歉,昨天有很多东西是错的,以下内容感谢 \(\textrm{liuhangxin}\) 的帮助指正。
所以开一个辅助数组 \(g_{i, j}\) 用来记录 后面的人准备走出环上,前面的人刚走到新的环上的时候形成的局面 为 \((i, j)\) (如果两个人都在同一个环上那定义为两个人都刚刚走到新的环上),\(dp_{i, j}\) 用来记录 两个人准备走出环上的时候形成的局面 为 \((i, j)\) 。显然,\(dp\) 和 \(g\) 是互相转移的。容易把起点和终点的问题用建立虚点转化掉。
\(dp\) 向 \(g\) 的转移是容易的,所以关键的问题是 \(g\) 向 \(dp\) 的转移。
转移大概以下几类,以下默认 \(x\) 是在前面的那个:
\[\begin{aligned}\\&
如果 x 是单点 \\&
g_{x, y} \rightarrow dp_{x, y} \\&
\\&
如果 x 和 y 不在一个环上 \\&
k * g_{x, y} \rightarrow dp_{pre_x, y} (环上的前一个点要特殊处理)\\&
(k - 1) * g_{x, y} \rightarrow dp_{x', y} (otherwise)\\&
\\&
如果 x 和 y 在一个环上,由于对称性哪个在前面无所谓 \\&
\\&
if(x = y) \\&
\frac{k(k - 1)}{2}g_{x, x} \rightarrow dp_{x', y'} (x' = pre_x \lor y' = pre_x)\\&
(\frac{k(k - 1)}{2} - 1)g_{x, x} \rightarrow dp_{x', y'} (otherwise,必须覆盖至少一次)\\&
else \\&
① \frac{k(k + 1)}{2}g_{x, y} \rightarrow dp_{pre_y, pre_x} (刚好覆盖整个图一圈,注意上面那类没有这种情况)\\&
②(\frac{k(k + 1)}{2} - 1)g_{x, y} \rightarrow dp_{x', y'} (x' \in [x, pre_y], y' \in [y, pre_x] ,两个的路径不交,注意要排除掉前面那种情况。)\\&
③(\frac{k(k - 1)}{2} - 1)g_{x, y} \rightarrow dp_{x', y'} (x' \in [y, pre_x), y' \in [y, pre_x) ,两个的路径相交,但不覆盖整个圈)\\&
④(\frac{k(k - 1)}{2} - 1)g_{x, y} \rightarrow dp_{x', y'} (x' \in [x, pre_y), y' \in [x, pre_y) ,两个的路径相交,但不覆盖整个圈)\\&
⑤\frac{k(k - 1)}{2}g_{x, y} \rightarrow dp_{x', y'} (x' \in [y, pre_x), y' \in [pre_x, pre_y) ,两个的路径相交,覆盖整个圈)\\&
⑥\frac{k(k - 1)}{2}g_{x, y} \rightarrow dp_{x', y'} (x' \in [pre_y, pre_x), y' \in [x, pre_y) ,两个的路径相交,覆盖整个圈)\\&
⑦\frac{k(k - 1)}{2}g_{x, y} \rightarrow dp_{x', y'} (x' = pre_x \lor y' = pre_y)
\end{aligned}
\]
这其中要特别注意的是 \(③④\) 两种转移的区间可能为空,要进行特判。我调了一早上 \(⑤⑥\) 两个区间其实是有交集的,具体见下图。在 \(k = 1\) 时,只存在转移 \(①②\) 。当然, \(k = 0\) 时答案为 \(0\) 。
有一些具有对称性的情况没写应该知道吧((,题目很良心的保证没有自环,算是减少了一下讨论量?
我知道这个很毒瘤,所以我放了一张图
看到这张图,你肯定会这道题了。每个转移就是一个矩形加操作,非常的好写,非常的没有细节。