P1155 [NOIP2008 提高组] 双栈排序
题目大意
给你一个序列 \(a\),要求一种双栈排序的方案使得其字典序最小。
题目思路
首先需要发现一个不容易想到但很关键简单的结论(仔细想一想就可以知道,这个结论无疑是充要的):
- \(i < j < k\),且 \(a_k < a_i < a_j\),那么 \(i, j\) 不能在两个不同的栈里。
有了这个条件,把所有满足条件的 \(i, j\) 连边,然后判断其是否是一张二分图即可,注意最后微调字典序时由于 \(s1\) 的插入与 \(s2\) 的弹出,\(s1\) 的弹出与 \(s2\) 的插入都没有关系,所以如果相邻直接交换即可。

浙公网安备 33010602011771号