NOI2024 D1T3 口胡题解
题目条件其实就是说对于点对 \((a,b)\),从 \(a\) 到 \(b\) 的路径上至少要有一条从 \(b\) 指向 \(a\) 的边。
将初始状态记作 \((T,S)\),其中 \(T\) 是树,\(S\) 是二元组 \((a,b)\) 的集合。注意到特殊性质 A 蕴含了:如果对于所有二元组 \((a,b)\),\(a\) 和 \(b\) 的距离都 \(\ge 2\) ,那么一定存在合法的定向方案。
我们来看看对于性质 A,怎样构造出字典序最小的方案。考虑当前尚未定向的编号最小的边 \(i\),钦定 \(s_i=0\)。接下来将 \(i\) 缩成一个点,同时一些点对 \((a,b)\) 的限制条件已经满足了,将它们从限制集合当中去掉,得到一个新的(规模更小的)状态 \((T',S')\)。这时候另一些(本来与 \(i\) 相邻)的边的方向已经确定了,我们将它们缩掉。重复这一缩边的过程,直到不存在被钦定方向的边为止。
上述步骤不会导致无解的情况,也就是说最终得到的状态 \((T'',S'')\)(如果 \(S''\) 不为空的话)必然满足性质 A。这是因为,在上述步骤当中被缩掉的边必定形如(其中 \((u,v)\) 是最开始缩掉的边):
这样的话一般情况也是简单的:由于保证有解,我们只需不断缩掉被钦定方向的边,直到满足性质 A 即可。
每次缩边的时候暴力更新一下每个二元组的状态,就得到了平方的做法。
用倍增维护路径和边的关系,就得到了 \(\log\) 的做法(大概),感觉细节比较多。
标签:二元,题解,钦定,缩掉,NOI2024,D1T3 From: https://www.cnblogs.com/LemonTY/p/18383679