QOJ8047 DFS Order 4
先考虑如何判断一个一个 \(p\) 的合法性。
如果 \(p_{i-1}<p_i\),把 \(p_i\) 挂到 \(p_{i-1}\) 下方;否则在 \(p_{i-1}\) 的祖先集合中取一个点 \(u\) 满足 \(u<p_i\) 且 \(u\) 最深,把 \(p_i\) 挂到 \(u\) 父亲下面。
现在连出来的树,不仅儿子递增,而且对于第 \(i\) 个儿子 \(u_i\) 的最后一个儿子 \(v_i\),\(v_i < u_{i+1}\)。
做一些容斥使得限制变成外向树(森林?)。然后记录 \(\prod 1/siz_i\) 转移。
?
\(\sum [p_i>p_{i+1}]\):用二项式反演进行钦定。
每一段递减序列,一定恰一个前缀满足 \(p_i>i\),一个后缀不满足。
从后往前按连续递减段 dp,同时枚举 \(p_i=i\) 的断点,用容斥来处理本质上位于一个 \([x, n]\) 区间的点。
一个矩形内的点可以不按有序算,因为只有一种方案,除去长度的阶乘就行了。
\(d_{i, x, y, a}\):\(x\) 个 \([p_i>i]\),钦了 \(y\) 个位置,后面估计要记一些与容斥相关的东西,不是很会。
agc039F
考虑每行最小值 \(a_i\) 和每列最小值 \(b_i\),从小到大枚举 \(t\),如果有 \(x\) 行 \(y\) 列的最小值为 \(t\),对答案的贡献为 \(t^{xn+yn-xy}\)。
为了保证恰好,转而容斥 \([\geq x] - [\geq x+1]\)。假设容斥了一共 \(t\) 行,容斥系数就是 \((-1)^t\)。
那么进行 dp。\(f_{i, j, t}\):已经填了 \(i\) 行 \(j\) 列,填完了所有 \(\leq t\) 的数值,当前的值乘上容斥系数的和。
转移时分步进行即可做到 \(O(n^4)\)。
QOJ5089
考虑 \([x^0][y^i] F(x, y) = \prod(1+x^{\{u_i, v_i\}}y)\),其中 \(x\) 这一维的乘法是集合对称差操作,\(y\) 这一维是加法卷积。
对 \(x\) 这一维进行 FWT,求 \([x^0]F = \frac{1}{2^n} \sum_S [x^S] FWT(F)\),又有 \([x^S]FWT(F) = \prod [x^S] (1+x^{\{u_i, v_i\}}y)\),每一项恰好是一个 \(1-y\) 或一个 \(1+y\),取决于 \(u_i,v_i\) 中位于 \(S\) 集合的点的个数。这是可以 \(O(2^n)\) 预处理的。枚举有多少个 \(S\) 共有 \(a\) 个 \(1+y\),即可得到 \([x^0]F\)。做状压 dp 好像就行,每次加入新点时算一下贡献变化。