abc/arc/agc 选做。
为什么我什么都不会啊???
AGC065 F. Always Perfect
合法性判定
发现生成树的构成对于不同点双之间都是独立的,所以缩点双(边双也满足独立但是性质不如点双强)。
考虑如何判定一张图是否合法,建圆方树,对每个方点,不妨先以它为根,考察它的儿子是否在该点双内匹配,发现在该点双内匹配当且仅当儿子的子树大小是奇数(由于是点双所以儿子子树内其他点都无法连接子树外的任意点)。
更进一步的,发现若所有儿子的子树的奇偶性不同,即存在 \(u,v\) 均在该点双内且 \(u,v\) 间有边且 \(u,v\) 子树奇偶性不同(不妨设 \(u\) 奇 \(v\) 偶),可以把 \((u,v)\) 边选进生成树后将 \(u\) 割去,由于是点双所以不借助 \(u\) 也依然可以连通建出生成树,在该生成树上 \(u\) 是叶子,但是它的父亲 \(v\) 不在该点双内匹配(不能与 \(u\) 匹配),所以 \(u\) 就找不到匹配了,形成矛盾。综上,以每个点双对应方点为根来看,该点双上的所有圆点的子树大小奇偶性一致。
大小为偶数即均不在点双内匹配,看起来没有什么性质值得讨论,转而去看子树大小均为奇数的点双。显然此时点双内必有偶数个点(否则没法两两匹配),且我们声称不能存在一个点在点双内度数超过 \(2\)。
考虑反证,不妨设 \(v_1\) 与 \(v_2,v_3,v_4\) 均有连边,考虑先割掉 \(v_1\) 后建生成树以 \(v_4\) 为根,将 \(v_2\) 设为 \(v_1\) 父亲说明 \(v_2\) 子树去除 \(v_1,v_2\) 的部分大小是偶数(需内部匹配),将 \(v_3\) 设为 \(v_1\) 父亲同理,然后再考虑断 \(v_2\) 和原本父亲的边以及 \(v_3\) 和原本父亲的边,均把父亲设为 \(v_1\),再将 \(v_1\) 父亲设为 \(v_4\),然后发现 \(v_2\) 和 \(v_3\) 至少有一个缺失匹配(因为它们都只能向父亲 \(v_1\) 匹配),由此矛盾。

所以这样的点双必须是偶环或两点一边结构。
于是你发现合法的图一定可以通过以下过程生成:
- 将 \(n\) 个点划分进不同连通块内使得每个连通块恰好是一个偶环或两点一边。
- 任取若干个连通块(连通块大小始终是偶数)并从每个中取出一个点,连成点双(对应前文说的子树大小均为偶数的点双)
- 重复 \(2\) 直至整张图连通。
计数
那看起来大概用 Cayley 定理对圆方树的一些特征做一下计数就好了吧!
具体来说,我们试图先处理出 \(f_{n}\) 表示有标号 \(n\) 个点点双连通图数。
但是好像没有什么合适的入手点,所以考虑容斥,先处理出 \(g_n\) 表示有标号 \(n\) 个点连通图数(这是容易的),然后给 \(f\) 增加一维变为 \(f_{n,m}\) 表示有 \(m\) 个点双连通分量的有标号 \(n\) 个点连通图数。对于每个 \(n\),只需先计算出 \(1<m\leq n\) 的情况后再把 \(g_n\) 减一下即可得到 \(f_{n,1}\)。
考虑如何求 \(f_{n,m}(m>1)\) ,先钦定 \(1\) 为根,为每个方点编号最后再除去 \(m!\),再为其余 \(n-1\) 个点分配它在圆方树上的方点父亲,然后对每个钦定好了的大小为 \(x\) 的点双乘上原本已经计算好了的贡献 \(f_{x,1}\)。此时你有 \(m+1\) 个部分,其中第 \(0\) 部分只有 \(1\) 一个点,其余第 \(i\) 个部分是方点 \(i\) 以及它的所有儿子,设 \(a_i\) 表示第 \(i\) 部分中的圆点数(要求非 \(0\) 且和为 \(n\))。将第 \(i\) 部分连接在第 \(j\) 部分下的方案数是 \(a_j\),求多少种连接方式形成一个以第 \(0\) 部分为根的树。你不妨先在这里乘上 \(a_i\) 变为 \(a_ia_j\),相当于大小分别为 \(a_i\) 和 \(a_j\) 的两个连通块相连,于是根据 Cayley 定理的结论可知方案数是 \(\prod\limits_{i=0}^{m}a_i(\sum\limits_{i=0}^ma_i)^{m-1}=\sum\limits_{i=0}^ma_in^{m-1}\)。再除去额外乘的 \(a_i\),恰好是 \(a_0n^{m-1}=n^{m-1}\)。
汇总下,即为
写恰当的背包转移即可做到 \(O(n^3)\)。
然后考虑如何统计答案,还是先枚举初始连通块数 \(m\) 和环长 \(l_i\),为每个环赋予编号最后再除去 \(m!\),然后钦定 \(1\) 在第一个环,将其余 \(n-1\) 个点分配至不同环,再统计环内的贡献,剩余的环间贡献还是类似上面先组成新方点下连新圆点的结构,枚举新方点数 \(k\) 和每个新方点的儿子数 \(a_i\)后,先选环中向上连向新方点的点(这一步对于第一个环以外的每个环都恰好要乘以一个 \(l_i\)),每个新方点代表的点双的组成方案数依然是 \(f_{a_i+1,1}\),然后组成圆方树的方案数根据上面的讨论可知是 \(l_1 n^{m-1}\),所以刚好每个 \(l_i\) 都恰好要乘上一次可以提出来,其余部分和上面类似。汇总下即为
其中 \(h_i\) 表示有标号大小为 \(i\) 的无向偶环数。一开始先加一个 \(h_n\) 是因为我们正常统计不到只有一个环的情况。
稍微优化一下背包即可 \(O(n^3)\) 计算。
AGC029 F. Construction of a tree
先将每个给定点集向其包含的所有点连边。
考虑分析解的存在性,发现一个必要条件是对于任意给定点集的集合 \(S\),均有 \(\lvert S\rvert+1\leq\lvert N(S)\rvert\)(考虑到 \(\lvert N(S)\rvert\) 最小的情况是其构成一个树上连通块) 。
(请注意,Ex-Hall 定理说的是 \((\forall S\in 2^{V_1})\lvert S\rvert\leq \lvert N(S)\rvert+k\))
看起来这个东西很像 Hall 定理,所以先考虑把额外的 \(1\) 消了,不难发现这个等价于任意删去一个右部点存在完美匹配。
但是我们现在的判据依然只是必要的,所以尝试对着一组完美匹配构造出树,这样即可说明充分性,也是题目所求。
考虑到我们先删除了一个点使得其没有匹配,那我需要为它赋予一个特殊意义,不妨对应树上的根,然后以它为起始点在树上遍历,任选一个包含当前点 \(u\) 的未选过的给定点集 \(T\),将 \(u\) 连向 \(T\) 的匹配对应点 \(v\),这样可以构建出一棵树,只要说明可以遍历到所有 \(n\) 个点即可。
考虑我们遍历了点集 \(S\) 且 \(\lvert S\rvert<n\),取 \(u\) 满足 \(u\notin S\),由于存在一个删去 \(u\) 后的完美匹配,使用 Hall 定理可知 \(\lvert S\rvert\leq\lvert N(S)\rvert\),又考虑到第一个遍历到的点并不是通过匹配边生成的,所以说明我们至少还有一个点可以遍历,由此可知我们会遍历完所有点,这便给出了构造,同时也说明了充分性。
ARC160 D. Mahjong
显然考虑反过来操作,从全 \(0\) 序列开始给连续 \(k\) 个数加一或给某个数加 \(k\),对进行 \(\frac{m}{k}\) 次操作的本质不同结果计数。
试图唯一化抵达一种状态的操作方案。
先把给连续 \(k\) 个数加一的操作挂到其中最靠前的上面,如果对一个点进行这种操作 \(k\) 次可以将其替换为对这 \(k\) 个数各做一次加 \(k\),于是我们可以限制对每个数的「后 \(k\) 个数加一」的操作数小于 \(k\)。不难发现这样是唯一的(因为另一种操作对每个点的影响都是被 \(k\) 整除的,这个操作的效果就类似从后向前去除每一位模 \(k\) 的余数)。
于是答案即为 \([k\mid m][x^{\frac{m}{k}}]\frac{\left(\sum\limits_{i=0}^{k-1}x^i\right)^{n-k+1}}{\left(1-x\right)^n}\)。
发现对分子使用等比数列求和公式并不好用,所以干脆直接考虑容斥,钦定 \(i\) 个位置被选了大于等于 \(k\) 次,直接二项式反演即可。
AGC005 E. Sugigma: The Showdown
先考虑判定何时可以一直持续走。
显然存在一条 A 树边在 B 树上距离超过 \(2\) 时可以反复横跳,A 的目标是走到这样的边上,B 的目标是阻止它。
先考虑没有这样的边,那么只看在 B 树上,A 每次最多相当于跳了两步,则 A 肯定无法越过 B 初始点的位置,因此肯定是有限步内结束的。
不妨以 B 初始点为根在 B 树上考虑。具体来说,B 做的事情是,从上至下压迫 A 的可选范围,这是不难模拟实现的。
那再考虑如果存在这样的边,A 只需要向上跳到最近的子树内存在这样边的点,然后向下找即可,找到了就是可以无限走,否则在中途被 B 击杀的时间就是持续次数。
AGC011 D. Half Reflector
首先如果第一位是 A 则肯定是将其修改为 B 然后结束,否则手玩下可以发现遇到第一个 A 后会回头撞到前一位(现在已经变为 A 了) 然后将其重新变为 B 后继续向前留下一个 A。
观察下发现,第二种情况其实是全局翻转再轮换一位。
那可以先跑一轮使得恰好轮换了 \(n\) 次,接下来如果 \(n\) 是偶数则每次拿到的第一位都一定为 B,否则一定为 A,因此前者循环节为 \(n\),后者循环节为 \(4n\),模拟即可。
本文来自博客园,作者:山田リョウ,转载请注明原文链接:https://www.cnblogs.com/yamadaryou/p/18676609

浙公网安备 33010602011771号