CF 722 E問題 Trees of Tranquillity

 まずKeshiのグラフ上でオイラーツアーをして、出発した時間と帰ってきた時間を記録する
これを使うと木の上で2つのノードが親子関係にあるかどうか調べられる
[出発した時間, 帰ってきた時間]の区間が図1のような関係になっている時親子関係がある。


次にSoroushのグラフ上で,BTreeSetを持ちながらdfsをする。
BtreeSetには( ノードxを出発した時間, x)というタプルが入る。

あるノードvを訪れたとする。

BTreeSet上で二分探索して、(ノードAを出発した時間, A) (ノードBを出発した時間, B)
ノードAを出発した時間<ノードvを出発した時間<ノードBを出発した時間 となったとする。


図1の場合はノードAを削除してノードvを入れたほうがお得
図2の場合はノードvを入れれる
図3の場合はノードvを入れないほうがお得
図4の場合は入れれる
図2,図4が成立する時入れれる


dfs中に最もBTreeSetの要素数の最大値が答えになる。

f:id:yagura37s:20210605095517p:plain


勉強になるけど解説見てもわからないぐらい難しかった。
でも楽しい問題だった。
コンテスト中に解けたら凄いと思った。