日记 2

2026/06/09

P5401 [CTS2019] 珍珠

题意:\(n\) 点,\(D\) 种颜色,要求出现次数为奇数的颜色种数 \(\leqslant n-2m\),问染色方案数。

对颜色种数二项式反演,\(f_i\) 表示恰好 \(i\) 个奇数,\(g_i\) 表示钦定 \(i\) 个奇数,则 \(f_i=\sum_{j=i}^D\binom ji(-1)^{j-i}g_j=\frac1{i!}\sum_{j=i}^D\frac{(-1)^{j-i}}{(j-i)!}\cdot j!g_j\) 为差卷积形式。

对于 \(g_k\),有:

\[\begin{aligned} g_k&=\binom Dkn![x^n](\sum_{i=0}^{\infty}\frac{i\bmod2}{i!}x^i)^k(\sum_{i=0}^{\infty}\frac1{i!}x^i)^{D-k}\\ &=\frac{D!n!}{k!(D-k)!}[x^n]\left(\frac{e^x-e^{-x}}2\right)^k\left(e^x\right)^{D-k}\\ &=\frac{D!n!}{2^kk!(D-k)!}[x^n]\left(e^x-e^{-x}\right)^k\left(e^x\right)^{D-k}\\ &=\frac{D!n!}{2^kk!(D-k)!}[x^n]\sum_{i=0}^k\binom ki(-1)^{k-i}e^{x(D+2i-2k)}\\ &=\frac{D!n!}{2^kk!(D-k)!}[x^n]\sum_{i=0}^k\binom ki(-1)^ie^{x(D-2i)}\\ &=\frac{D!n!}{2^kk!(D-k)!}[x^n]\sum_{i=0}^k\frac{k!}{i!(k-i)!}(-1)^ie^{x(D-2i)}\\ &=\frac{D!n!}{2^k(D-k)!}[x^n]\sum_{i=0}^k\frac{(-1)^ie^{x(D-2i)}}{i!}\cdot\frac1{(k-i)!}\\ &=\frac{D!}{2^k(D-k)!}\sum_{i=0}^k\frac{(-1)^i(D-2i)^n}{i!}\cdot\frac1{(k-i)!}\\ \end{aligned} \]

这个为和卷积形式,总时间复杂度 \(O(D\log D)\)Submission.

2026/06/10

射命丸文的笔记

对于 \((n-1)!\) 种哈密顿回路,其会被 \(2^{\frac{n(n-1)}2-n}\) 个竞赛图包含。所以若设 \(tot\) 为有哈密顿回路的竞赛图数,答案即为 \(\frac1{tot}(n-1)!2^{\frac{n(n-1)}2-n}\)

在竞赛图上有神秘性质:

  • 缩点后一定是一条按拓扑序从小到大,每个点往后面所有点连边的链。

    归纳地证:若新加的点会让一些 SCC 合并则依旧成立,否则必定存在一个前缀的点指向新点,剩余后缀的点被新点指向。则将新点放入分界点处即可维持该性质。

  • 竞赛图的每个 SCC 都存在哈密顿回路。

    依旧归纳:若新点 \(x\) 不会让 SCC 合并则显然成立,否则必定存在 SCC \(A,B\),其中 \(a\in A\)\(b\in B\) 前面使 \(b\to x,x\to a\)。此时找到 \(A\) 哈密顿回路上 \(a\) 的上一个点 \(a'\),同理有 \(b\) 的下一个点 \(b'\),则 \(A\cup B\cup\{x\}\) 的哈密顿回路为 \(x\to a\rightsquigarrow a'\to b'\rightsquigarrow b\to x\)

所以竞赛图有哈密顿回路等价于其恰包含一个 SCC。设其 EGF 为 \(F(x)\)。另设 \(G(x)\) 为所有竞赛图的 EGF,则 \(G(x)=\frac{F(x)}{1-F(x)}=\sum_{i=1}^n\frac{2^{\frac{i(i-1)}2}}{i!}x^i\)。解得 \(F=\frac G{1+G}\),多项式求逆即可。

Submission.

CF438E The Child and Binary Tree

设答案的生成函数为 \(F(x)\),设单点的生成函数为 \(C(x)=\sum_{i=1}^nx^{c_i}\),则有方程 \(F=F^2C+1\),解得 \(F=\frac{1\pm\sqrt{1-4C}}{2C}\),根据样例得应只保留 \(F=\frac{1-\sqrt{1-4C}}{2C}\)

多项式求逆、开方即可。注意分母需平移后求逆。Submission.

[SHOI2006] 有色图 / [HNOI2009] 图的同构计数

在 Pólya 定理中,我们需要计算每一种点置换是多少种方案的稳定化子。考察置换分解成的每个轮换(后以大小代指轮换),轮换 \(c_1,c_2\) 间的连边会被划分为 \(\gcd(c_1,c_2)\) 个等价类;而轮换 \(c\) 内部的连边会被划分为 \(\lfloor\frac c2\rfloor\) 个等价类。所以等价类个数就是二者加和。

枚举点置换是不现实的,考虑将轮换大小的集合(可重集)相同的点置换合并计算。即,枚举轮换大小的集合 \(\{c_k\}\),则其对应的置换数为 \(\Large\frac{n!}{\prod c_i\prod cc_i!}\),其中 \(cc_i\) 表示 \(c_j=i\)\(j\) 的数量。

Submission 1. / Submission 2.

2026/06/22

超绝模拟赛
【MX-X29-T4】Max Convolution

\(O(n^2)\) 暴力是弱智的,而且 \(C[0,n-1]\)\(C[n,2n-2]\) 在两个序列 reverse 后是一个意思。

那么,考虑每个前缀 \(\max(a,b)\) 最大值管控的范围 \([l,r]\),则取到它的 \(C_i\) 必定保证 \(l\leqslant i\leqslant r\) 且另一个序列所选的下标在 \([0,r-l]\) 内。

暴力枚举 \(j:0\to r-l\),则它会尝试与所有的前缀最大值对应下标配对,这个可以用 bitset<n> pa,pb 记录,配对通过左移实现。

Submission.

[CCO 2026] Melborp

考虑最小值是哪些位置。从两边同时扫,找到了就填,然后以它为分界线分治。

但是多个最小值怎么办?因为保证有解,所以出现了 \(B_i>(i-l+1)(r-i+1)\) 只能说明它是上一层的最小值,减个一即可。

Submission.

[CCO 2026] Tree Traversals

设点 \(x\) 的层数 \(d_x\)\(x\)\(1\) 的简单路径上点数。

根据条件 \(2\)\(\{p_n\}\) 一定是一层一层地向下遍历的,这告诉我们层之间是几乎独立的。

再根据条件 \(1\),设层 \(i\) 所有点的 LCA 为 \(lc_i\),则无论层内怎么排顺序,相邻点的距离最大值始终是 \(D_i=2(i-d_{lc_i})\)

\(2(i-d_{lc_i})\) 是个上界这很显然,下面说明取等。

如果只有一个点显然满足,否则 \(lc_i\) 一定存在至少两个子树中包含层 \(i\) 内部分点的儿子。无论怎么排顺序,总会存在相邻两点跨过两个子树,其路径长度取到该上界。

所以把所有的 \(D_i\) 最大值记作 \(D_{\max}\),则有:

  • 询问的 \(K<D_{\max}\):取到 \(D_{\max}\) 的那层层内条件 \(1\) 都满足不了,无解。
  • \(K=D_{\max}\):取到 \(D_{\max}\) 的层与下一层的连接会存在部分限制。
  • \(K>D_{\max}\):层内可以随便排,直接将每层大小的阶乘乘起来即为答案。

现在只剩 \(K=D_{\max}\) 了。对于 \(D\) 非最大的层(或者最后一层),贡献依旧是层大小的阶乘;
否则对于层 \(i\),发现 \(lc_{i+1}\) 必定在 \(lc_i\) 的某个儿子 \(s\) 的子树之内(若不然,\(D_{i+1}\) 将大于 \(D_i\))。此时能与层 \(i+1\) 连接的点只有在 \(s\) 子树内的那些层 \(i\) 的点,贡献即为它们在最后一位的排列数。

显然 \(D\) 最大的层的 \(lc\) 只会一路向叶结点走,不会重复,所以找 \(s\) 以及找 \(s\) 子树内有多少当前层的点总计都是 \(O(n)\)。这里用的是 \(O(n\log n)\) 预处理 LCA。Submission.

【MX-X29-T7】Mirror

需要统计左下的每个端口与右上端口的合法匹配数。可以证明只要每个左下端口匹配的是其右上方的端口,这个匹配就是合法的。

所以考虑枚举左边有 \(k\) 个向上匹配的,同时有下边共 \(k\) 个向右匹配的。此时设 \(f_{i,j}\) 表示前 \(i\) 个左边的端口有 \(j\) 个向上匹配的,\(f_{i,j}=f_{i-1,j-1}+f_{i-1,j}(j+1)\),初值为 \(f_{0,0}=1\)

观察到(谁知道怎么想到的)\(f_{i,j}={i+1\brace j+1}\),用到的又只有 \(f_{n,i},f_{m,i}\),所以可以直接算一整行的斯特林数。

Submission.

2026/06/24

[USACO19DEC] Tree Depth P

如果不管深度,只求逆序对为 \(k\) 的方案数,其生成函数为 \(F(x)=\prod_{i=1}^n\sum_{j=0}^{i-1}x^j\)(考虑 \(a_i\) 在前 \(i\) 个数中的相对大小)。

但是有深度。但是有 \(d_i=\sum_j\left[j~是~i~的祖先\right]\)。而 \(j\)\(i\) 的祖先等价于在 \(\left[\min(i,j),\max(i,j)\right]\)\(a_j\) 为最小值。

那么枚举 \(L=|i-j|\),在总的生成函数中除掉 \(\sum_{i=0}^{L-1}x^i\),就相当于钦定了 \(a_j\) 就是最小值。直接取对应位置的 \(F(x)\) 系数即为方案数。

\(\frac{F(x)}{\sum_{i=0}^{L-1}x^i}=F(x)(1-x)\frac1{1-x^L}=F(x)(1-x)\sum_{i=0}^{\infty}x^{iL}\),预处理 \(F(x)(1-x)\),然后总计 \(O(K\log K)\) 地枚举 \(i\) 即可。Submission.

2026/06/25

「Wdsr-2.7」百花齐放的太阳花田

洛谷题解。

[Code+#2] 可做题1

\(k\times k\) 矩阵是优美的 \(\Longleftrightarrow\) 所有它的 \(2\times2\) 子矩阵都是优美的。

充分性:如右图:
必要性:多个上下相连的 \(2\times2\) 子矩阵能说明这两列对应位置的差相等,也即 \(a_{i,j}=r_i+c_j\),所以任选 \(k\) 个不同行不同列的位置,元素和均为 \(\sum r+\sum c\)

Submission.

2026/0626

[JAG 2023 Summer Camp #2] Gemini Tree (Ver.Lapislazuli)

首先容易发现树 \(T\) 上各个点的石头可以互相交换,也就是说可以随意排列。所以我们只关心绿色石头的数量 \(k\)

易知 \(T\) 断开至多一条边能产生的连通块大小集合为 \(S=\{sz_i\mid i=1,2,\dots,n\}\cup\{n-sz_i\mid i=1,2,\dots,n\}\)。所以如果不管后面删叶子的事情,那么所有合法的 \(k\) 就是 \(S\) 的所有元素,答案即为 \(\sum_{k\in S}\binom nk\)

但是还要删叶子,所以要减去删了之后不是双子树的方案。

\(D_k\) 为断开至多一条边能产生的、大小为 \(k\) 的连通块 的集合,断言:

\(|D_k|\geqslant2\),则 \(D_k\) 中任取两相异元素 \(C_1,C_2\)\(C_1\setminus C_2\)\(C_2\setminus C_1\) 中均有叶子。


证明:显然 \(k\ne0,k\ne n\),那么 \(D_k\) 中元素都是通过断边生成的。不妨给 \(T\) 随便定一个根,以边两端深度较大的点来指代边。记点 \(x\) 子树点集为 \(sub_x\)
记生成 \(C_1,C_2\) 的这两条边对应点分别为 \(x_1,x_2\)。若 \(x_1=x_2\)\(C_1,C_2\) 必定一个是 \(sub_{x_1}\),一个是 \(T\setminus sub_{x_1}\) 子树,上述结论显然成立。对 \(x_1,x_2\) 的关系分讨:

  • 呈祖孙关系(\(\operatorname{lca}(x_1,x_2)\in\{x_1,x_2\}\)
    不妨设 \(x_1\) 为 LCA,则要么 \(C_1=sub_{x_1},C_2=T\setminus sub_{x_2}\),要么 \(C_1=T\setminus sub_{x_1},C_2=sub_{x_2}\)
    前者 \(sub_{x_2}\) 中的叶子都 \(\in C_1\setminus C_2\)\(T\setminus sub_{x_1}\) 中的叶子都 \(\in C_2\setminus C_1\);后者显然成立。
  • 不呈祖孙关系
    此时要么 \(C_1=sub_{x_1},C_2=sub_{x_2}\),要么 \(C_1=T\setminus sub_{x_1},C_2=T\setminus sub_{x_2}\)
    前者显然成立;后者 \(sub_{x_1}\) 中叶子都 \(\in C_2\setminus C_1\)\(sub_{x_2}\) 中叶子都 \(\in C_1\setminus C_2\)

所以如果 \(|D_k|\geqslant2\),所有 \(k\) 个绿的方案都是合法的。构造则任取 \(D_k\) 两相异元素 \(C_1,C_2\),删 \(C_1\setminus C_2\) 中的任意一个叶子。若为绿,则将剩余 \(k-1\) 个绿挪到新的 \(c_1\);否则挪到 \(C_2\)

现在只用管 \(|D_k|=1\) 了,设 \(D_k=\{C\}\)。此时所有叶子的颜色都是固定的:\(C\) 中的叶子都必须是蓝色,其他叶子都必须是绿色。而且 \(C\) 中的叶子不能被任何 \(D_{k+1}\) 中的集合包含,\(T\setminus C\) 中的叶子必须被所有 \(D_{k-1}\) 中集合包含。

将叶子按 dfs 序排序,则每个连通块所包含的叶子形如 \([l,r]\)\(U\setminus[l,r]\)。这种东西就很容易判断包含 / 相交之类的了。时间复杂度 \(O(n\log n)\),瓶颈在排序、lower_boundSubmission.

2026/06/29

「Wdoi-2」纯粹的复仇女神

类似“比赛”,扫描右端点,线段树维护左端点的答案,用单调栈求每种颜色各自按最小值分成的段,线段树要支持区间插入一个数以及区间撤销一个数,区间查询最大值。

Submission.

「EZEC-9」模糊众数

对于暴力,每次询问我们枚举众数出现次数 \(c\),从小往大暴力枚举值,将其出现次数变到 \(c\) 及以下,然后将 \(x\) 补到 \(c\) 次。总计 \(O(qnV)\)

但是实际上可能会被修改到的位置只有 \(c=1\) 时会被修改到的,以及询问问到的,离散化后总计 \(O(q+n)\) 个位置,所以暴力的复杂度为 \(O(qn(n+q))\)

但是发现出现次数有变化的点只有 \(O(\frac nc)\) 个,每次用线段树找第一个 \(>c\) 的点,这样就是 \(O(qn\ln n\log(n+q))\)

又发现固定询问,答案关于 \(c\) 是一个开口向上的下凸函数(证明不会,感性理解),所以可以二分斜率,但复杂度不变。

既然每个询问都要二分,而且二分的 check 前半部分还都一样,那就整体二分,然后就是 \(O(n\ln n\log(n+q)+q\log n\log(n+q))\)Submission.

2026/06/30

CF1764F Doremy's Experimental Tree

对于直接相连的点 \((i,j,d)\),运用算两次,发现 \(f_{i,j}=\frac12((f_{i,i}-sz_jd)+(f_{j,j}-sz_id))=\frac12(f_{i,i}+f_{j,j}-nd)\),即 \(d=\frac{f_{i,i}+f_{j,j}-2f_{i,j}}n\)

对于不直接相连的点对 \((i,j)\),发现直接套用上面的式子算出来的恰好是 \(dis_{i,j}\)(考虑每个点 \(x\)\(f_{i,i},f_{j,j},f_{i,j}\) 的贡献)。所以把所有点对拎出来,最小生成树即为合法方案。

Submission.

「KDOI-03」构造数组

设状态 \(f_{i,j}\) 表示 \(1\sim i\) 已经填完了,剩余 \(j\) 个位置的方案。转移即为枚举当前有多少个是填的之前的空位,然后两个组合数乘上。

复杂度 \(O((\sum b)^2)\)Submission.

2026/07/01

CF2062F Traveling Salescat

\(\max(A,B)=\frac{A+B+|A-B|}2\),所以 \(\max(a_i+b_j,a_j+b_i)=\frac{a_i+a_j+b_i+b_j+|(a_i-b_i)-(a_j-b_j)|}2\)。令 \(A_i=a_i+b_i,B_i=a_i-b_i\),则原式化为 \(\frac12(A_i+A_j+|B_i-B_j|)\)

常数扔掉,发现如果中间的数确定了是哪些,那这些数一定是按 \(B\) 升序排列的(证明考虑补上起点和终点的 \(B\) 的差值,此时路径变为环且刚好取到环长的最小值 \(2(\max\{B\}-\min\{B\})\))。

所以可以按 \(mn,st,ed,mx\) 的顺序选出这 \(4\) 个关键的点,以此 \(O(n^2)\) 地 DP。Submission.

CF601E A Museum Robbery

线段树分治,然后背包。板?Submission.

「HCOI-R2」秋殇别恋

首先题目的所谓“操作”很骇人,其实只要区间里有非 \(0\),操作就会被忽略。所以如果区间是固定的,那么等价于选出若干两两不交的区间,将区间和的绝对值相加。

但是有修改。感觉一下,只管有贡献的区间,越靠左的区间最终改成的区间也会越靠左。所以排序后 DP,设 \(f_{i,j,k}\) 表示考虑了前 \(i\) 个区间,用了 \(j\) 次修改,右端点在 \(k\)。优化是容易的。

Submission.

2026/07/02

CF2185H BattleCows 2

枚举当前奶牛前面的数量 \(y\),设 \(p=a_{y+1}\)。对于最终前面的牛数 \(x\),若要合法,则必须满足 \(x\leqslant y,[s_x\geqslant p]+\sum_{i=x}^{y-1}[s_i+p<a_{i+1}]+\sum_{i=y+1}^{n-1}[s_i<a_{i+1}]\leqslant k\),或者 \(x>y,[s_{x+1}-p\geqslant p]+\sum_{i=x+1}^{n-1}[s_i<a_{i+1}]\leqslant k\)

前者分讨 \(s_x,p\) 的大小关系后可以二分最小的 \(x\)check 可以用主席树;后者分讨 \(s_{x+1},2p\) 的大小关系后即为三维偏序,分治即可。

Submission.

2026/07/07

「ALFR Round 11」D Adjacent Lifting, Fewest Rounds

别人的题解

2026/07/09

加工生产调度

邻项交换:设 \(a_1,b_1\)\(a_2,b_2\) 前更优,且在 \(a_1\) 前 B 机器比 A 机器晚 \(\Delta\) 空闲。

即:\(\max(a_1+a_2,\max(a_1,\Delta)+b_1)+b_2\leqslant\max(a_1+a_2,\max(a_2,\Delta)+b_2)+b_1\)

也即 \(\max\{a_1+a_2+b_2,a_1+b_1+b_2,\Delta+b_1+b_2\}\leqslant\max\{a_1+a_2+b_1,a_2+b_2+b_1,\Delta+b_1+b_2\}\)

一通大力分讨得:优先排 \(a\leqslant b\) 的,内部按 \(a\) 升序;再排 \(a>b\) 的,内部按 \(b\) 降序。

排完序直接模拟即可。Submission.

2026/07/10

[KTSC 2024 R2] 岛屿

容易发现内部的连边会将整个多边形划分为若干三角形。考察边数与点数的差,得到至少新建一个点。

于是,可以随便选一个三角形内新建点,先构造出三角形内部的两颗生成树。每次将相邻的三角形纳入考虑,对边染色即可。Submission.

2026/07/16

[USACO23FEB] Problem Setting P

对于每道题,将所有人对它的评价压成一个数,那么一个题目序列满足条件就等价于相邻两数中后面的数一定包含前面的数。

相同值的题之间可以互换,这个单独算。现在只考虑不同值之间的转移——设 \(f_i\) 表示当前最后一个选的数为 \(i\),则每次转移均为求高维前缀和的形式。

但是 \(O(nm2^m)\) 很爆炸,考虑对高 \(\frac m2\) 位枚举超集,低位只在询问时枚举子集。这样就是 \(O(n2^{\frac m2})\) 了。Submission.

posted @ 2026-06-09 18:42  flyingpg  阅读(20)  评论(0)    收藏  举报