做题记录 25.7.5
\(\textcolor{purple}\odot\) CF1698F Equal Reversal
对于每个值建立一个点,对于序列中相邻两个数 \((a,b)\),\(a\) 向 \(b\) 连有向边,将序列 \(a\) 建为图,则一次操作相当于选择图上一个环,改变环上边的方向
令 \(F(a)=[(min(u,v),\max(u,v))\mid u=a_i,v=a_{i+1}]\),即以 \(a\) 建图后图上边的可重集(视为无向边),显然 \(a\) 可以转化为 \(b\) 的必要条件为 \(a_1=b_1,a_n=b_n\),\(F(a)=F(b)\),以下通过构造说明这是充分条件
假定已经令 \(a_{1\sim i}=b_{1\sim i}\),令 \(x=a_i=b_i\),令 \(y=a_{i+1},z=b_{i+1}\),\(y=z\) 时直接跳到下一个位置
若 \(y\ne z\),尝试在 \(a_{i+1\sim n}\) 中找到一对相邻的 \((z,x)\),若找到了,则设 \(a_p=z,a_{p+1}=x\),翻转 \(a_{i\sim p+1}\)
若没有找到,显然此时 \(F(a_{i+1\sim n})=F(b_{i+1\sim n})\),因此 \(a_{i+1\sim n}\) 中一定存在相邻的 \((x,z)\),设 \(a_p=x,a_{p+1}=z\),若能找到 \(i\le l\le p,p+1\le r\le n,a_l=a_r\),则翻转 \(l\sim r\) 后转化为第一种情况
可证 一定能选出这样的 \(l,r\)
容易做到 \(O(n^3)\)
\(\textcolor{purple}\odot\) CF1697F Too Many Constraints
建立 \(2nk\) 个点 \((i,j,0/1)\;1\le i\le n,1\le j\le k\),其中点 \((i,j,0)\) 表示 \(a_i>j\),\((i,j,1)\) 表示 \(a_i\le j\),连边类似 \(2-\text{SAT}\)
显然 \(\forall i,v\),\((i,v-1,1)\to (i,v,1)\)(同时连接 \((i,v,0)\to (i,v-1,0)\),下同),\((i+1,v,1)\to (i,v,1)\)(保证递增),强制选择 \((n,k,1)\)(即连 \((n,k,0)\to(n,k,1)\))
对于 \(a_i\ne x\) 的限制,\(x=1\) 时强制选择 \((i,1,0)\),否则 \((i,x,1)\to (i,x-1,1)\)
对于 \(a_i+a_j\le x\) 的限制,若 \(x\le k\) 则强制选择 \((i,x-1,1)\) 和 \((j,x-1,1)\),\(\forall u\),令 \(v=x-u-1\),连 \((i,u,0)\to(j,v,1)\) 和 \((j,u,0)\to (i,v,1)\)
\(a_i+a_j\ge x\) 类似
建出图后处理方式类似 \(2-\text{SAT}\)
时间复杂度 \(O(\sum (nk+mk))\)

浙公网安备 33010602011771号