TOP > 木 根付き木に変換(Convert-Rooted-Tree) 2019/08/02 • ei1333 説明 木 $g$ を根 $r$ から遠ざかる辺のみからなる根付き木に変換する。 計算量 $O(N)$ 実装例 convert_rooted_tree($g$, $r=0$):= 木 $g$ を根 $r$ から遠ざかる辺のみからなる根付き木に変換したものを返す template< typename G > G convert_rooted_tree(const G &g, int r = 0) { int N = (int) g.size(); G rg(N); vector< int > v(N); v[r] = 1; queue< int > que; que.emplace(r); while(!que.empty()) { auto p = que.front(); que.pop(); for(auto &to : g[p]) { if(v[to] == 0) { v[to] = 1; que.emplace(to); rg[p].emplace_back(to); } } } return rg; }