2023-2-8 #35 将日光夺回的反叛 在冰结中展开
——Licis《蝉鸣死去的夜晚》
【乐正绫AI原创】蝉鸣死去的夜晚【原创曲PV付】 太好听了,真的很推荐!
昨天和 juju hzr 一起训了一场 ACM:CCPC2022 Weihai,不知道为啥感觉状态比较拉,签到的 G 题都不会做了,写的几道题也调了很久😔。(不过这场的题也很💩)
今天小小玩了一款恐怖游戏 缄默咖啡厅,剧情和美术风格都说得过去,不过娃娃跳脸还是吓到我了呜呜呜😟,希望晚上睡得着觉。
不太记得群论了,复习一下。(所以可能今天的题比较水!)
192 P4128 [SHOI2006] 有色图 / P4727 [HNOI2009]图的同构计数
做这题让我想起了圆环之理。
根据 polya 定理只需算出每种排列对应点的等价类数量与边的等价类数量。
由于 \(n\) 比较小,我们可以直接用分拆数的复杂度枚举环的拆分,注意分拆的系数需要考虑圆排列与相同大小环之间的无序,然后等价类就很好算了:无非是每个环内部有环长除二下取整的等价类,两个不同环有环长 \(\gcd\) 的等价类。
193 P4708 画画
也是一道分拆数的题,我们先类似上一道题分拆数地枚举一下。
环内的边:对于长为奇数的环,每条边都会让每个点度数加二;对于长度为偶数的环,只有恰好跨越半个环的边才会让整个环全体度数加一,其余都是加二。
环之间的边:对于两个大小分别为 \(x,y\) 的环,有 \(\gcd(x,y)\) 个等价类,一条边对左边每个点连出 \(\frac{y}{\gcd(x,y)}\) 条边,右边则是 \(\frac{x}{\gcd(x,y)}\)。那么每个等价类无非分三类:无作用、某个环所有点度数奇偶性改变、两个环同时改变。
那么可以变为一张有自环重边的图,你要选择一个子图使得每个点度数为偶数。而这是经典问题:P4494 [HAOI2018]反色游戏。
给出结论:设自环数量为 \(s\),点数 \(n\),边数 \(m\),那么一个连通块的方案数为 \(2^{\max(s-1,0)+m-n+1}\),若没有自环我们可以任选一棵 dfs 树,每种非树边选择方案都恰好对应一种情况,有自环只需自环选择数量为偶数就好了。
194 loj#6538. 烷基计数 加强版 加强版 / P6598 烷烃计数 / P6597 烯烃计数
先做烷基计数。
毕竟有根树,可以直接列生成函数,对于根的三棵子树应用 burnside。
其中置换 \((1,2,3)\) 三棵子树没有限制,\((1,3,2),(3,2,1),(2,1,3)\) 要求两棵子树相同,\((2,3,1),(3,1,2)\) 要求三棵子树相同。
这个东西可以牛顿迭代,但其实我也不太会牛顿迭代,复习一下!
多项式牛顿迭代:给定 \(g(x)\),求 \(f(x)\) 满足 \(g(f(x))\equiv 0\pmod{x^n}\)。
方法:倍增,我们解出 \(g(f_0(x))\equiv 0\pmod{x^{\lceil\frac n2\rceil}}\)。
将 \(g(f(x))\) 在 \(f_0(x)\) 处泰勒展开得到 \(g(f(x))=\sum_{i\geqslant 0}\frac{g^{(i)}(f_0(x))(f(x)-f_0(x))^i}{i!}\equiv 0\pmod{x^n}\)。
而 \(f(x)-f_0(x)\) 最低非零项为 \(\lceil\frac n2\rceil\),因此 \(i\) 只需考虑到 \(1\)。
得到 \(g(f_0(x))+g'(f_0(x))(f(x)-f_0(x))\equiv 0\pmod{x^n}\),即 \(f(x)\equiv f_0(x)-\frac{g(f_0(x))}{g'(f_0(x))}\pmod{x^n}\)。
那么有:
牛顿迭代的过程 \(F(x^2),F(x^3)\) 都是常函数,套式子就好了,复杂度 \(O(n\log n)\)。
然后是烷烃计数。
无根树经典的钦定方法:以重心为根。
根有可能有四个儿子,类似上面的式子我们能得到:
重心去重比较简单,因为砍掉一棵重心子树后剩余两个连通块都是烷基。于是减去某棵子树大小大于 \(\lfloor\frac n2\rfloor\) 的情况以及两个重心算重的情况就好啦。
最后是烯烃计数。
断开碳碳键后两个连通块都是有根且根度数不超过 \(2\) 的烷烃,于是列出:
三道题都是 \(O(n\log n)\)。
195 CF1630E Expected Components
场上不会 polya 折戟沉沙!
196 ABC284H Count Unlabeled Graphs
197 CFgym104023G Grade 2
很丢人阿,这种签到题不会做!把这题丢给 hzr 他一下秒掉了。
我们有:
那么可以立即得到 \(i\) 中高于 \(\lceil\log_2 x\rceil\) 的位无影响,答案有一个 \(2^{\lceil\log_2 x\rceil}\) 的循环节,预处理即可。
198 CFgym104023L Novice Magician
很难,不知道为什么很多队伍都会。
如果总和不是 \(2^{n-1}\) 的倍数一定无解,因为每次贡献都是这个的倍数。
我们首先可以用 \(2^{n-1}-1\) 次操作,每次用前面 \(2^{n-1}-1\) 个位置来辅助还原掉最后面一个数。
操作带来的 \(-0,-2,-4\) 的额外贡献显然可以预先消掉,那么一次操作可以看成选中的所有位置减去某个数。由于只剩 \(2^{n-1}+1\) 个数,其事实上等价于某个位置加一个数,这就好构造了。
注意到此时未还原的前 \(2^{n-1}+1\) 个数总和一定仍是这个的倍数,不妨记其为 \(s\)。
直接给出策略:对于第 \(i\in[1,2^{n-1}+1]\) 轮,我们操作所有 \(j\ne i\),将其加上 \(\frac{s}{2^{n-1}}-a_i\),可以发现最后位置 \(i\) 加上的是 \(s-\sum_{j\ne i}a_j=a_i\)。