Official

D - One to One Editorial by PCTprobability


\(G\) の中のある連結成分 \(G'\) について考えます。\(G'\)\(N'\) 頂点とした場合、辺数も \(N'\) であるため \(G'\) にはサイクルが \(1\) 個だけ存在します。

よって、連結成分数の代わりにサイクル数を数え上げることとします。

まず、\(A_i \neq -1\) である \(i\) に対して辺を貼った場合に出来ているサイクルを数えておきます。

その後、上記の連結成分以外は木となっています。それらに \(1,2,\dots,K\) と番号をつけ、\(i\) 番の連結成分のサイズを \(B_i\) と置きます。

\(1 \le x_1 < x_2 < \dots < x_k \le K\) に対して、番号 \(x_1,x_2,\dots,x_k\) の連結成分の頂点が含まれるサイクルの個数を求めます。これは \((k-1)! \times \prod_{i=1}^{k} B_{x_i}\) となります。

よって、\(k\) ごとに \(\prod_{i=1}^{k} B_{x_i}\) の総和を動的計画法で求めることによってこの問題は \(\mathrm{O}(N^2)\) で解くことができます。

また、\(\prod_{i=1}^{K} (1 + B_ix)\) を分割統治で計算することで \(\mathrm{O}(N\log^2 N)\) で解くことも可能です。

posted:
last update: