联合省选 R3
https://cplusoj.com/d/senior/contest/699ff0881363e1a0769335d9
T1 qoj7239 Triangle
不妨令 \(a<b<c\),需要满足 \(c-b<a\)。
枚举 \(k=c-b\),由于 \(A<60^{\circ}\),故 \(a\) 越小越好。
\(a\) 确定后,需要最小化 \(b+c\),也就是最小化 \(b\)。
这可以通过 bitset 求出最优的 \(b\)。\(O(\frac{m^2}{w})\)。
T2 qoj16123 Colorful Components
先将同色的边删除。容易发现最后只会保留菊花。
给每个点 \(u\) 找到一个 \(p_u\) 表示有一个指向菊花中心的边 \(u\to p_u\),要求每个点的儿子都颜色不同。这可以使用网络流求出,单位网络复杂度 \(O(m\sqrt m)\)。
现在我们可能有一些基环树或者树。考虑环的情况,偶环可以两两配对,奇环找到三个连在一起,一定可以找到一个合法的三个点。
那么基环树,定义环上的点深度为 0,然后按照深度从大到小处理每个点。若点 \(u\) 未匹配就让他和他的父亲匹配。然后 \(u\) 父亲有未匹配的儿子也一起匹配了。
基环树环上的点有些匹配了,删除他们后得到若干链。奇链剩下一个和 \(p_u\) 配对。
环上没有匹配就是和环一样做。
树可能剩下一个根,这就无法匹配了。
T3 qoj15325 Yet another permutation problem
如果知道 \(a,b\),考虑判定。
不妨设 \(A_{l,r}\) 表示 \(a_{l\sim r}\) 组成的集合,\(B_{l,r}\) 同理。
\(l=r\) 直接判定。否则考虑如下过程。
找到最小的 \(mid\) 满足 \(A_{l,mid}=B_{l,mid}\),若 \(mid\ne r\),可以直接递归判定。
否则,进行操作 2。若仍有 \(mid=r\) 则不合法,否则递归。
考虑设计 dp \(f_{l,r,state=0/1/2}\) 表示当前区间中三种情况:不变/最大值变成最小值/最小值变成最大值。且在不进行操作二的情况下不存在合法分割点。
求出这个 \(f\),最后进行一个区间划分 dp 求出最终答案。
考虑区间内 \(\min,\max\) 在的位置是 \(l_0,r_0\)。
由于 \(mid\) 是最小的划分点,则 \([l,mid]\) 强制割开。所以是 \(f_{l,mid,*}\)。
又因为交换了 \(\min,\max\) 后才有合法分割点,所以有 \(l_0\le mid<r_0\)。
\((mid,\le r_0)\) 被划分为若干个 \(f_{l_i,r_i,0}\) 的拼接。最后拼上一个 \(f_{*,r,*}\)。
从大到小枚举 \(l\),往右扫 \(r\) 并维护上述拼接的 dp 数组。
三种状态 \(0/1/2\) 分别对应 \((\max_1,\min_1),(\max_1,\max_2),(\min_1,\min_2)\),你发现这个区间的移动量是 \(O(n)\) 的。
那么就是总复杂度 \(O(n^3)\)。
浙公网安备 33010602011771号