木の重心
頂点$ vが木の重心$ \iff$ vを根とした木において、その子を根とする部分木のサイズがどれも$ \frac{N}{2}未満
適当な頂点を根として木DPをする。子側、親側の隣接頂点それぞれについて、部分木のサイズを判定すればOK。 code: centroid.py
def tree_topological_sort(N, G, r):
R = []
while deq:
i = deq.popleft()
R.append(i)
deq.append(j)
return R, P
R, P = tree_topological_sort(N, G, 0)
sub = 1 * N # iを根とする部分木のサイズ center = 1 * N # 頂点iは重心か? h = N // 2