Official

F - Add One Edge 2 Editorial by nok0


問題文の条件を分かりやすく言い換えましょう。

頂点 \(u,v\) を結ぶ辺を追加すると、\(u-v\) パス上の頂点が閉路に含まれます。このことから、問題は、「頂点を \(3\) 個以上含む単純パスであって、端点の次数が \(2\) 、それ以外の頂点の次数が \(3\) であるものの個数を求めよ。」と言い換えられます。

言い換え後の問題を木 DP により解きます。適当な頂点を選び、木を根付き木にします。

ここで、数えるパスの端点の LCA を考えます。すると、LCA は端点に一致するか、パス(端点除く)上の点に一致します。

まず、端点の LCA が端点に一致する場合を考えます。LCA の頂点を \(u\) とすると、この場合数えたいパスの個数は \(u\) の部分木に含まれる次数 \(2\) の頂点であって、\(u\) から次数 \(3\) の頂点を \(1\) 個以上取って到達できるものの個数に等しいです。これは木 DP でボトムアップに計算できます。

次に、端点のLCA が端点に一致しない場合を考えます。LCA の頂点を \(u\) を考えます。 \(u\) の部分木に含まれる次数 \(2\) の頂点であって、\(u\) から次数 \(3\) の頂点を \(1\) 個以上取って到達できるものの集合を \(S\) とすると、求めるパスの個数は、\(S\) から二つの頂点を選ぶ方法のうち、選んだ二つの頂点の LCA が \(u\) に一致するものの個数と等しいです。

これは、\(u\) 以下の部分木から \(u\) を取り除くことで何個かの部分木に分かれますが、分かれた部分木の中から二つを選び、そこから頂点を選ぶ方法と等しく、こちらも同様の DP によって計算できます。

計算量は \(\mathrm{O}(N)\) です。

posted:
last update: