[省选联考 2025] 图排列 —— 故地重游
[省选联考 2025] 图排列 —— 故地重游
Sub 1 \(G\) 是树,\(n\le 2000\)
注意本质上就是安排结点的排列顺序,不要让边交叉,递归地做这种事情,在每个点处,相当于我们能够安排子树的顺序。
我们只需要记录每个子树序列的第一个数就可以比较了,不需要把序列都记下来。
Sub 2 \(G\) 联通,\(n\le 2000\)
这是赛时跳过的分,现在看看,应该是破解的关键。注意对于一个环来说,你必须把他顺序放置,要不然就会交叉。
好像还是同样的。就不断地断环为链,然后剖分出最大的环,然后递归,就是说把边双剖出去。
总结一下,边双缩点,外面的按树做,然后里面的边双,找最小点,放最左边,断掉一条边,重复边双缩点的操作。
等一下,大环套小环是不可能的,或者说,只有一种环套环是有可能的——他只能是一条链上面加若干不交可包含的边的那种。
我猜这种应该是可以随便转的。
所以显然,第一位一定是 1,我们先把 1 放到第一位,然后其实这种环套环的多余边没什么用,也没有造成限制。
具体怎么做,以 1 为根建立 DFS 树,如果有到 1 的返祖边 \(x\to 1\)(要是有多个,随便抓一个),把他抓出来,然后遍历 1 到 x,把中间其他点的 DFS 子树拿去递归,一个DFS 的子树就可以随便决定放左边还是右边的顺序,大于根的都放右边,小于根的都放左边,然后内部再排下序。注意一个在有返祖边时的特判,根的子树是可以任意排序的,但是非根的、1-x 路径上的子树只能选择放左还是放右。要是没有返祖边,就直接递归根的子树,可以随便排序。
Sub 3 \(n\le 2000\)
可以直接尝试插进当前序列,插进第一个比本树序列的第一个大的那个,注意最开始总是以最小的那个为根,递归的时候不需要,因为结构固定了。
Sub 4 \(n\le 10^5\)
我们只需解决最后插入的那个问题即可。其实我们知道每个树序列的第一个,就是最小的那个标号。我们用链表并存每个点对应的当前位置,支持下区间加区间求最小值即可,插入可以用链表维护。
不对不对,什么东西,直接按顺序进行,把联通块按最小标号排序,如果下一个数大于下一块的最小标号,那么就继续加入下一块的内容。
等等,这个玩意要对,必须依赖于,我要找到一个点双里面的一个哈密尔顿路,这样我这个就是满足的,引用题解的话说,剩下的边就是挂在哈密顿路上面的。
我感觉这玩意跟题解殊途同归了,我必须找到点双内部的哈密顿环。而这是 CF1656I Neighbour Ordering - 洛谷。
俺的任务完成辣!
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18889655

浙公网安备 33010602011771号