【构造,图论,建模】Loj3629「2021 集训队互测」序列
有一个长为 \(n\) 的未知序列,给定 \(m\) 个限制,每个限制形如给定 \(i,j,k,x\),要求 \(a_i,a_j,a_k\) 的中位数为 \(x\)。构造一个符合条件的序列或输出无解。
\(n,m\le 10^5\)。
首先这是一个 3-SAT 问题,不知道怎么能想到要转化成 2-SAT 问题。
事实上,\(a_i,a_j,a_k\) 的中位数为 \(x\),可以转化成以下 2 种条件:
-
若 \(a_i>x\),则 \(a_j,a_k\le x\),以及对称的几个限制;
-
若 \(a_i<x\),则 \(a_j,a_k\ge x\),以及对称的几个限制。
考虑这两条限制怎么体现。事实上,学习最小割“切糕”的方法,对每个 \(i\) 弄一条长为 \(10^9\) 的链,然后若 \(a_i\ge x\) 则选 \((i,x)\) 为真,那么以上的 \(<,>,\le,\ge\) 都是可以表示的。
建出图跑 2-SAT 即可。时间复杂度 \(O(n)\)。