競賽圖 SCC 計數(ARC163D)

KingPowers發表於2024-07-05

我們先端上來一個美味的結論。

對於一張有 \(n\) 個點的競賽圖 \(G\),它的 SCC 數量等於:

  • \(G\)\(n\) 個點劃分為兩個點集 \(S\)\(T\),且要求 \(|T|>0\),對於任意的 \(u\in S\)\(v\in T\)\(u\)\(v\) 之間的連邊方向為 \(u\to v\) 的方案數。

考慮將圖 \(G\) 進行縮點,競賽圖縮點後的形態一定是 \(scc_1\to scc_2\to\ldots\to scc_k\) 這麼一條鏈,同時鏈上每個點再向後面所有點連邊。然後我們任選一個 \(0\le p<k\),將 \(scc_p\) 及它前面的 \(scc\) 內部的點劃分到 \(S\),將 \(scc_{p+1}\)\(scc_k\) 內部的點劃分到 \(T\),容易發現和上面的方案正好構成雙射,且 \(p\) 的取值恰好為 \(k\) 種,也就是 SCC 個數。

ARC163D Sum of SCC

呃,根據上面的結論,直接數劃分點集且恰好 \(m\) 條正向邊的方案數。

直接設 \(f_{i,j,k}\) 表示當前已經給前 \(i\) 個點劃分好了點集,此時 \(|S|=j\),有 \(k\) 條正向邊的方案數,轉移考慮刷表,討論 \(i+1\) 號點放到哪個集合:

  • 放到 \(S\) 集合中,連到 \(T\) 內的 \(i-j\) 條邊全是反向邊,連到 \(S\) 內的 \(i\) 條邊任意定向,列舉 \(x\) 條邊為正向邊,有 \(f_{i+1,j+1,k+x}\leftarrow f_{i,j,k}\times\binom{j}{x}\)

  • 放到 \(T\) 集合中,從 \(S\) 內連來的 \(j\) 條邊全是正向邊,連到 \(T\) 內的 \(i-j\) 條邊任意定向,列舉 \(x\) 條邊為正向邊,有 \(f_{i+1,j,k+j+x}\leftarrow f_{i,j,k}\times\binom{i-j}{x}\)

時間複雜度 \(O(n^5)\)

提交記錄

相關文章