CF1198C Matching vs Independent Set
给一个无向图,\(3 \times n\) 个点, \(m\) 条边,请找大小为 \(n\) 的点独立集或边独立集。
\(n,m \le 5 \times 10^5\)
解题思路:
不难发现一个大小为 \(n\) 的独立集和一个大小为 \(n\) 的边独立集,两个点数加起来最多为 \(3 \times n\) 的。
然后当一个边独立集中不能再从他点集的补集中加边时,就说明他点集的补集是一个点独立集。
所以考虑任选一个极大边独立集,那么分讨一下是选边独立集还是点独立集就行。
CF618F Double Knapsack
给了你两个数组 A 和 B,请问能不能从 A,B 中各选一个集合使得和相同。
\(n \le 10^6,1 \le A_{i},B_{i} \le n\)
解题思路:
考虑从中选出的集合不同的和最多有 \(\frac{n \times (n + 1)}{2}\) 种不同的数字。
然后一个数组的子段的个数也为 \(\frac{n \times (n + 1)}{2}\) 个。
我们猜测他子段也可以做。
设 \(suma_{i} = sum_{j=1}^i a_{j}, sumb_{i} = \sum_{j=1}^i b_{j}\)。
强定 \(suma_{n} \le sumb_{n}\)。
设 \(p_{i} = min_{suma_{i} < sumb_{j}} j\),则有 \(1 \le sumb_{p_{i}} - suma_{i} \le n\)。
由于对于任意的 \(0 \le i \le n\),都有 \(p_{i}\),所以一定存在两个整数 \(i,j\) 使得 \(sumb_{p_{i}} - suma_{i} = sumb_{p_{j}} - suma_{j}\)。
于是就能找到一个解。
用双指针能做到 \(O(n)\)。