2024.4 第一週做題記錄

山田リョウ發表於2024-04-04

\(2024.4.2\) CF1336D Yui and Mahjong Set

題意:

初始有一個值域在 \([1,n]\) 的多重整數集 \(S\),且每個元素重複次數最多為 \(n\),定義 \(\operatorname{triple}(S)\) 表示 \(S\) 中相同無序三元組數量,\(\operatorname{straight}(S)\) 表示 \(S\) 中連續整數的無序三元組數量,告訴你初始 \(\operatorname{triple}(S)\)\(\operatorname{straight}(S)\),每次你可以選擇加入一個 \([1,n]\) 內的整數並會返回修改後的兩項權值,要求在不超過 \(n\) 次操作後求出 \(S\)​。

\(4\leq n\leq 100\)

題解:

solution.

code.

\(2024.4.2\) ABC306Ex Balance Scale

題意:

給一個大小為 \(n\)​ 的無向圖,可以將一些點合併,求所有合併再將每條邊定向後無環的方案數。

\(1\leq n\leq 17\),時限 \(3s\)

題解:

先不考慮合併點,設 \(f_s\) 表示 \(s\) 的匯出子圖定向後無環的方案數。

考慮列舉一個其定向後無環的某個圖的極大入度為 \(0\) 的點集 \(t\),即將所有 \((u,v)\) 滿足 \(u\in t,v\in s\) 定向為 \(u\rightarrow v\),那我們首先要保證 \(t\) 為獨立集。

其次我們發現難以去要求其是極大的,所以考慮再將其容斥,顯而易見有獨立集的子集仍為獨立集,又由於 \((\forall s)\sum\limits_{t\subseteq s}[t\neq\emptyset](-1)^{|t|+1}=[s\neq\emptyset]\),因此容易有 \(f_s=\sum\limits_{t\subseteq s}[t\neq\emptyset][t\text{ 為獨立集}](-1)^{|t|+1}f_{s-t}\)

然後再考慮合併點操作,也就是把列舉到的 \(t\) 中連通塊縮點即可。

預處理下每個子集中連通塊數量再列舉子集計算即可,時間複雜度 \(O(3^n)\)​。

code.

\(2024.4.3\) 歐貝里斯克的巨神兵

題意:

給一個大小為 \(n\) 的有向圖,求其生成無環子圖數量。

\(1\leq n\leq 17\),時限 \(4s\)

題解:

思路同上一題,容易推得轉移方程 \(f_s=\sum\limits_{t\subseteq s}[t\neq\emptyset](-1)^{|t|+1}2^{\operatorname{edges}(t,s-t)}f_{s-t}\),其中 \(\operatorname{edges}(s,t)=|\{(u,v)|(u\in s)\land(v\in t)\}\cap E|\),可以在固定 \(s\) 的情況下從小往大從低位轉移,時間複雜度 \(O(3^n)\)

code

\(2024.4.3\) 「PKUSC2018」最大字首和

題意:

求一個序列 \(a\) 任意排列的最大字首和之和。

\(1\leq |a|\leq 20\)

題解:

首先為了防止計重,當有多個字首和同時為最大時,我們欽定選擇最靠前的。

\(b\)\(a\) 的某個排列,\(s\)\(b\) 的字首和。那 \(s_i\) 最大當且僅當 \((\forall x\in [2,i]\cap\mathbb{Z})(s_i-s_{x-1}>0)\land(\forall x\in(i,n]\cap\mathbb{Z})(s_x-s_i\leq0)\),即 \(b_{\{2,i\}}\) 字尾和全正,\(b_{\{i+1,n\}}\) 字首和全非正。

因此維護 \(f_s\) 為點集為 \(s\) 且字首和全非正的排列數,\(g_s\) 為點集為 \(s\) 且字尾和全正的排列數,\(f\) 列舉排列最後一位、\(g\) 列舉排列第一位,遞推維護即可。最後列舉 \(b_1\) 再列舉 \(b_{\{2,i\}}\) 更新答案即可,時間複雜度 \(O(n2^n)\)

code.

\(2024.4.4\) 「清華集訓2014」主旋律

題意:

求一個有向圖 \(G=(V,E)\) 的生成強連通子圖數。

\(1\leq|V|\leq 15\)

題解

\(f_s\) 表示 \(s\) 的生成強連通子圖數,答案即為 \(f_{V}\)

強連通圖等價於縮點後結點個數為 \(1\) 的圖,容斥一下變成計數縮點後結點個數大於 \(1\) 的圖。

類似前文 DAG 計數的思路,列舉縮點後入度為 \(0\) 的強連通分量集合再容斥,考慮到容斥係數的底數是 \(-1\),次數是強連通分量數加一,於是維護每個點集劃分為奇偶數個的強連通分量,轉移時將前者減去後者再乘上 \(2\) 以起點不在這個入度為 \(0\) 的強連通分量內的邊數次冪即可(因為對剩下的點沒有要求,相關的邊亂選即可)。至於每個點集劃分為奇偶數個的強連通分量方案數,就是欽定最後一次一定選含編號最小的點的強連通分量,胡亂轉移即可。因要列舉子集,所以複雜度 \(O(3^n)\)

code