[组合数学题单]树!不等!
这道题的加强版,就是从链变成了树,弱化版都很难了,这还来加强版......只不过不用打分治 NTT 了
题目自己编的......
只有数学不会,不会就是不会,怎么学都不会......
壹、题目
没找到出处,被迫手打了
一棵树,每条边限制两个端点的大小关系(限制 \(a_u>a_v\) 或 \(a_u<a_v\))。
求有多少种符合要求的排列 \(a\) 满足整棵树的限制。
数据规模:\(n\le 5000\).
贰、题解
定义边向下为正方向,那么如果整棵树都是正方向,最后的答案就是
\[n!\prod_{i=1}^n{1\over size_i}
\]
从期望角度考虑,具体看弱化版。但是肯定没有那么好的出题人,考虑使用与弱化版相同的思路,将向上的边容斥掉,但是与弱化版不同的是,它的连通块大小不能直接求,而在弱化版中就是 \(i-j\),所以我们还得加一维记录连通块中有多少点,定义 \(f_{i,j}\) 表示当以 \(i\) 为根的子树中有 \(j\) 个节点的时候整颗子树合法的概率,对于点 \(u\) 和它的儿子 \(v\) 之间的关系,分两类讨论
- 当规定 \(a_u<a_v\),即这条边是向下,显然他们俩在同一连通块中,所以不用更改第二维,所以我们直接将 \(f_{v,k}\) 加进 \(f_{u,j}\);
- 当规定 \(a_u>a_v\),即这条边向上,是反的,这个时候我们默认的是他们不在同一连通块,如果要把大于小于反向,它就会被加入连通块,此时需要更改第二维,同时需要算上容斥系数,但是它还要保证当前点 \(u\) 还得是子树中最小的而非原来的子树 \(v\),所以得将保证 \(v\) 最小的概率 \(1\over size_v\) 去掉(就是乘 \(size_v\)),算上保证 \(u\) 最小的概率 \(1\over size_u+size_v\),但是注意此处的 \(size\) 并非子树大小,而是连通块个数,携程转移方程即 \(f_{u,j+k}\) 加上 \((-1)^tf_{v,k}{k\over j+k}\);
由于 \(n\) 比较小,可以直接硬转移 不会有人想写 NTT 的,最后的答案就是 \(n!\times \sum_{i=0}^nf_{1,i}\).
叁、用到の小 \(\tt trick\)
似乎和弱化版相似,除了是在树上维护以外没什么不同的。