2025.4.16 模拟赛

4.16 模拟赛

tree

key: \(w^c=\sum\limits_{i=0}^c {c\choose i}(w-1)^i ,(w>1)\)

题意可以转化为,钦定 \(i\) 个环,其他只要不连到 \(fa\) 就可以任选,贡献乘上权值 \((w-1)^i\)
显然一个有 \(c\) 个环的状态,一定会被算到 \(c \choose i\) 次,所以这样的转化是等价的。

于是我们只需要计算钦定若干个环的方案数。

经典的,不能有 \((i\to fa_i)\) 的边 容斥为 钦定有 \(x\)\(i\to fa_i\) 的边,系数 \((-1)^x\)

注意到这 \(x\) 条边在树上一定没有三度点,即为若干条不交有向链。把 \(i\) 条链拼成 \(j\) 个环的方案数就是第一类斯特林数,容易递推。

于是容易在树上 \(f(u,i,x,0/1)\) 背包转移,选 \(i\) 条链的方案是 \(\sum f(i,x)(-1)^x(n-1)^{n-(i+x)}\)(根节点要特判一下),这样是 \(O(n^3)\) 的。

显然容易把 \(x\) 这一维去掉(因为 \(x\) 是在指数上的,可以乘进去),背包时枚举是否选到儿子的边。

注意到我们可以选孤点,这样方案数才是对的(因为环上不一定所有边都被钦定)。

graph

签到题,做法很多

场上做法是先边双缩点成森林,然后 LCT 维护加边,如果加非树边就把树链拎出来 merge 成一个点。查询直接把 1-n 的链 split 出来求 siz,非常无脑。

但实际上边双缩点后直接把 1-n 的链拎出来做就好了...完全不需要写 lct...并查集 + 链表就完事了。

permutation

key:个数乘积 \(\to\) 每段选一个逆序对的方案数

“选一个逆序对”相当于钦定一个大小关系,期望转概率,考虑对每种选择方案的出现概率求和。

重排的 \(m\) 个位置相当于一条有向链,不妨只考虑这 \(m\) 个位置有序的情况,最后乘上一个 \(m!\)

钦定大小关系相当于连有向边,问题转化为拓扑序计数,我们只会算外向树的,于是希望将图转化为树。

不妨称这 \(m\) 个位置为固定元,其他位置为自由元,则逆序对有三种情况:

  1. 自由元 - 自由元
  2. 固定元 - 自由元
  3. 自由元 - 固定元

第一种情况跟树无关,只需乘一个 \(\frac{1}{2}\) 的系数。
第二种情况相当于在有向链上挂一个叶子,仍然是外向树,没有影响。
第三种情况比较麻烦,因为是从外面指向链上的点。但我们可以容斥,用没有限制的情况减去挂这个叶子的情况(北京冬令营讲过),于是还是外向树。

我们设计 dp,同时考虑分段和选逆序对。
\(f(i,j,k,0/1/2/3)\) 表示考虑到第 \(i\) 个位置,当前是第 \(j\) 段,树上挂了 \(k\) 个叶子,当前 没选/选了自由元/选了固定元/选完了 逆序对。
在每个位置考虑是否选这个位置,是否重新分段,对应转移即可。
注意第三种情况的容斥,\(f(i+1,j,k,3)\leftarrow \frac{1}{c+k}f(i,j,k,1)\),相当于选了 \(i+1\) 但对 \(i+1\) 和前面选的自由元大小没有限制;\(f(i+1,j,k+1,3)\leftarrow -\frac{1}{c+k+1}f(i,j,k,1)\),相当于选了 \(i+1\) 且钦定 \(i+1\) 大于前面的自由元。
由于最后我们只关心分的段数,\(k\) 这一维会被求和,所以这样容斥就是正确的。
注意到这里分段是我们钦定的,所以概率要除以总方案数,插板一下就知道是 \({n-j-1\choose j-1}\)

posted @ 2025-04-16 20:51  Cindy_Li  阅读(29)  评论(0)    收藏  举报