2023-7-3 #63 点燃星 亲手点燃目光尽头的准星
——《夜航星》(不知道怎么标作者,放个链接吧)
430 Ptz2020 Winter Day 8. Almost Algorithmic Contest A Um nik's Algorithm
结论:对于最大匹配为 \(K\) 的二分图 \(G\),使用 dinic 增广 \(t\) 次后得到的匹配 \(M\) 满足 \(|M|\geqslant\frac t{t+1}|K|\)。
证明:考察 \(K\) 与 \(M\) 对称差,其由 \(|K|-|M|\) 条链组成,且每条链都是增广路。根据 dinic 经典性质,每条增广路内在 \(M\) 内的边数不少于 \(t\),于是 \((|K|-|M|)t\leqslant |M|\)。
注意一次 dinic 多路增广是 \(O(m)\) 的,因此复杂度 \(O(Cm)\),其中 \(C\) 可以取 \(20\)。实现时需要注意常数,例如可以省去源汇相关的边,也可以加入卡时。
431 P8194 [USACO22FEB] Phone Numbers P
dp 套 dp,先写出内层的判定性 dp:
\(f_i\) 可以从 \(f_{i-1},f_{i-2},f_{i-4}\) 转移过来,转移条件是这一段可以被一次性输入。
可以直接状压 \(f_i,f_{i-1},f_{i-2},f_{i-3},a_i,a_{i-1},a_{i-2}\),但是这很浪费。改为记录集合 \(a_i,a_i\cup a_{i-1},a_i\cup a_{i-1}\cup a_{i-2},a_i\cup a_{i-1}\cup a_{i-2}\cup a_{i-3}\),若对应 \(f\) 值为零可以直接记录一个特殊符号。
但力度不够,我们可以考虑将没有可能合法的集合同样标记为特殊符号,此时状态数大大减少,峰值据说只有 \(50\),复杂度 \(O(n)\)。
432 P8192 [USACO22FEB] Paint by Rectangles P
看不懂题解,有人教我吗?
433 loj#3405. 「2020-2021 集训队作业」Gem Island 2
一个重要的观察是任意序列 \(p\) 的生成概率是均等的,对于序列 \(p\),列出其生成的概率:
第一部分是多重组合数,第二部分是其产生的对应系数。
前 \(r\) 大的限制不好处理,我们使用扩展 min-max 容斥——
\(f\) 即下标集合期望最小值,显然只与集合大小有关,容易写出:
预处理所有 \(f\) 并不困难,对 \({d-i+n-1\choose n-1}\) 做 dirichlet 后缀和即可。
再推一下外面,容易得到:
后面的式子看着就很面善,\(p\leqslant r\) 时值为 \([p=1]\),大于的情况,拆一下组合数发现两个式子相消了,得到通项 \((-1)^r{k-2\choose r-1}\)。
434 ARC163E Chmin XOR Game
打表题,素质不高。
手玩 \(a_i\in[0,3]\) 的情况发现:先手必胜当且仅当有且只有一种非零颜色。
于是将数字写成四进制,若有一位满足条件则先手必胜,容易归纳证明正确性,复杂度 \(O(n\log a)\)。
435 CFgym104417H Be Careful 2
与 421 CF1086F Forest Fires 非常像的题目。
容斥,钦定有 \(k\) 个点在矩形内造成 \((-1)^k\) 的容斥系数。
注意到若一些钦定的点构成的矩形严格内部还有钦定的点,容斥系数会抵消成 \(0\),于是只需考虑内部没有点的。
枚举左右边界,此时只需考察 \(O(1)\) 个矩形(使用链表维护),一个矩形造成的贡献是容易 \(O(1)\) 计算的。
复杂度 \(O(k^2)\)。
436 ABC308H Make Q
容易发现尾巴一定是一个点的前三小邻居,枚举尾巴问题变为求包含一个点的最小环。
这里记录一种简单的写法——\(O(n^2)\) dijkstra,并记录每个点是起点哪条支流出来的,枚举两个源头不同的点(注意讨论起点与其邻居的情况)合并即可。
复杂度 \(O(n^3)\)。
uoj#192. 【UR #14】最强跳蚤:显然题,随权值异或一下。
437 uoj#193. 【UR #14】人类补完计划
剥叶子,因此算生成基环树的方案数是简单的——通过状压 dp 计算生成环的数量,然后每次钦定一个叶子集合,根据 P6295 有标号 DAG 计数 的经验,容斥系数是 \((-1)^{|S|+1}\)。
我们考虑赋予权值组合意义,来更无脑地计算答案——答案是钦定叶子只能染白色,给点集黑白染色的方案数。于是我们枚举结点集合,钦定一个子集是黑色叶子进行容斥,系数容易计算。
复杂度 \(O(3^n)\)。
438 uoj#194. 【UR #14】思考熊
类似 这篇文章 中的 uoj#191. 【集训队互测2016】Unknown 一题,我们维护点集的虚树,并提前换根 dp 出最近点相关信息。查询即向上跳到第一条虚树边,然后分讨计算答案。虚树的维护采用上面一题方法,信息合并是线性的。
也可以直接点分,线段树/平衡树维护相关信息。
复杂度 \(O(n\log^2)\)。
uoj#118. 【UR #8】赴京赶考:容易发现两维无关,随便算算就好了。
440 uoj#119. 【UR #8】决战圆锥曲线
感觉不难,但是干扰有点多让人想不到。
注意到只有后缀最大值可能成为答案,由于序列随机后缀单调栈大小是 \(\log\) 级别,线段树随便维护下就好了。
441 uoj#120. 【UR #8】宿命多项式
挺难的。
先将多项式转为下降幂形式,其好处是前 \(k\) 项系数只影响前 \(k\) 项点值。
假设我们依次确认了系数 \(c_0,\cdots,c_{k-1}\),想要计算 \(c_k\) 的可能方案:
前面的系数只会导致取值区间的平移,只会影响取值数量是 \(\frac{lim_k}{k!}\) 还是其加一,而且我们只关心前面一段模 \(k!\) 的余数。
由于 \(n\leqslant6\),看起来要枚举一些余数。由于 \(c_{0,\cdots,n}\) 上面带的系数越来越大,我们不妨枚举 \(c_0\bmod n!,c_1\bmod (n-1)!,\cdots\)。注意到通过余数容易确认上式模 \(k!\) 的结果。
但是 \(O(\prod_{i=1}^n i!)\) 并不能过,我们尝试去掉外层的 \(n!\),即取消 \(c_0\) 的枚举。
由于 \(c_0\) 上面的系数一定是 \(1\),其影响较好刻画。我们直接 \(2^n\) 枚举每个取模的结果计算即可,复杂度 \(O(2^n\prod_{i=1}^{n-1}i!)\),可能要排序不过可以离线基排去掉 \(\log\)。