做题记录 24.4.5
\(\textcolor{purple}\odot\) CF1949K Make Triangle
显然等价于将 \(\{v_i\}\) 划分为大小为 \(a,b,c\) 的三个集合 \(A,B,C\) 满足任意集合内总和 \(<s\),其中 \(s=\left\lceil\frac{\sum v_i}2\right\rceil\)
令 \(P(S)=\sum_{i\in S}i\),令 \(d(S)=\begin{cases}a&S=A\\b&S=B\\c&S=C\end{cases}\),初始令 \(A,B,C\;\gets \mathbb\emptyset\),将 \(v\) 从小到大排序,然后从大到小考虑 \(v\) 中每个元素应该加入的集合,设当前考虑到 \(v_i\)
若存在 \(S\in\{A,B,C\}\) 使得 \(P(S)+\sum_{j=1}^{d(S)-|S|}v_j\ge s\) 则显然无解
若存在 \(S\in\{A,B,C\}\) 使得 \(|S|<d(S)\) 且 \(P(S)+v_i+\sum_{j=1}^{d(S)-|S|-1}v_j<s\),则可将 \(v_i\) 加入 \(S\)
若 \(v_i\) 无法加入任意一个集合则无解
这一构造必要性显然,充分性证明
时间复杂度 \(O(\sum n\log n)\)
\(\textcolor{purple}\odot\) CF1945H GCD is Greater
显然 \(|A|=2\) 时一定不劣
对于某一二进制位,若超过两个数这一位为 \(0\),则 \(\text{AND}_{y\in B}\{y\}\) 的这一位必然为 \(0\)
若这一位为 \(0\) 的数不超过两个,则将这些数所在位置加入一个集合 \(S\) 中
这样最优解中 \(A=\{a_x,a_y\}\) 有两种种情况:
- \(x\in S\lor y\in S\)
- \(x\notin S\land y\notin S\)
对于前一种情况,假定是 \(x\in S\),则枚举 \(x\),然后枚举 \(y\ne x\),结合 \(\text{ST}\) 表 \(O(\log V)\)(因为还要一次 \(\gcd\))内判断一组 \((x,y)\) 是否合法,这部分时间复杂度为 \(O(n\log^2 V)\)
对于后一种情况,显然 \(\text{AND}_{y\in B}\{y\}\) 的值是确定的,此时只要找到 \(\gcd(a_x,a_y)\) 最大的一对 \(a_x,a_y\) 即可,这部分时间复杂度容易做到 \(O(V\ln V+V\log V)=O(V\log V)\)
总时间复杂度 \(O(\sum (n\log^2 V+V\log V))\)
\(\textcolor{green}\odot\) CF1945G Cook and Porridge
模拟,堆优化即可,时间复杂度 \(O(\sum n\log n)\)(假设 \(n,d\) 同阶)
\(\textcolor{purple}\odot\) CF1949D Funny or Scary?
在所有边都未知的情况下,考虑把点划分为两个部分,其中一部分大小为 \(\left\lceil\frac34n\right\rceil\),这部分内部的边权为 \(0\),剩余边权为 \(1\),此时最长连续 \(0\) 路径长度为 \(\left\lceil\frac 34n\right\rceil-1\),最长连续 \(1\) 路径长度为 \(2\left\lfloor\frac n4\right\rfloor\),符合要求
然后考虑给定一部分边的情况
从给定边形成的连通块中选出一个总点数不超过 \(\min(n,\left\lceil\frac34 n\right\rceil+1)\) 的子集(实际上不 \(+1\) 也可过),令 \(S\) 为这个子集中的点的集合
具体计算方式为将连通块按点数从大到小排序,然后枚举每个连通块,可加入就加入
令 \(ss\) 为最小的连通块的大小,则根据上述过程,必有 \(\left\lceil\frac34 n\right\rceil+1-ss<|S|\le\left\lceil\frac34 n\right\rceil+1\)
由于只连了 \(\left\lfloor\frac n2\right\rfloor\) 条边,因此当 \(n\ge 3\) 时,最小连通块大小一定 \(\le 1\),即此时有 \(\left\lceil\frac34 n\right\rceil\le|S|\le\left\lceil\frac34 n\right\rceil+1\);当 \(n=2\) 时,有 \(0\le|S|\le 2\)
\(S\) 内确定的边中,必有一种出现次数 \(\le\left\lfloor\frac n4\right\rfloor\),设为 \(v\;(v\in\{0,1\})\),\(S\) 外未确定边定为 \(v\),\(S\) 内未确定边定为 \(1-v\)
此时权值为 \(v\) 的路径长度不超过 \(2(n-|S|)+\left\lfloor\frac n4\right\rfloor\),\(n>2\) 时 \(2(n-|S|)+\left\lfloor\frac n4\right\rfloor\le 2(n-\left\lceil\frac34 n\right\rceil)+\left\lfloor\frac n4\right\rfloor=3\left\lfloor\frac n4\right\rfloor\le \left\lceil\frac34n\right\rceil\),\(n=2\) 时不超过 \(\left\lceil\frac34n\right\rceil=2\)
权值为 \(1-v\) 的路径长度不超过 \(|S|-1\le \left\lceil\frac34n\right\rceil\)
时间复杂度 \(O(n^2)\)

浙公网安备 33010602011771号