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 好像就行,每次加入新點時算一下貢獻變化。