phyllo’s algorithm note

レッドコーダーへの道のりは遠い。休んでる場合じゃない!

ABC173 F. Intervals on Tree

問題

N頂点N-1辺からなる木が与えられる。
頂点には1からNまで番号がつけられている。

整数1 <= L <= R <= Nについて、関数f(L,R)を以下のように定める。

  • Sを番号がL以上R以下の頂点からなる集合とする
  • 頂点集合Sと両端がSに属する辺からなる部分グラフにおける連結成分の個数をf(L, R)とする

このとき、Σ_{L=1}^N Σ_{R=L}^N f(L, R)を求めよ。

制約

  • 1 <= N <= 2*10^5

解法

ある辺eに注目すると、そのeがaとbをつないでいる場合、Lがa以下、Rがb以上の場合に含まれる。
この辺eが追加されると、上記のような(L,R)で、連結成分が1つ減ることになる。

したがって、辺がない場合での連結成分数の合計を求めて、各辺について、Lがa以下、Rがb以上の場合、a*(N+1-b)個のL,Rのペアで連結成分が-1になるの引いていけば良い。

「辺がない場合での連結成分数の合計」は、Σ_{i=1}^N (N*(N+1)/2)で求められて、これから各辺のa*(N+1-b)を引いていけばよいので、O(N)で求められる。