AcWing 846. 树的重心-python3
原题链接
简单
作者:
机械佬也想学编程
,
2020-07-07 22:14:28
,
所有人可见
,
阅读 507
N = 10**5 + 10
ans = N
st = [False] * N
h = [-1] * N
e = [0] * 2 * N
ne = [0] * 2 * N
idx = 0
# 返回以x为根结点的树总共的节点数
def dfs(x):
global ans
st[x] = True # 标记x点已经搜寻过了
sum = 1
size = 0
i = h[x]
while i != -1: # 遍历x节点的子节点
val = e[i]
i = ne[i]
if not st[val]:
s = dfs(val) # 返回以val为根结点的子树节点数
sum += s
size = max(size, s)
size = max(size, n-sum)
ans = min(size, ans)
return sum
# 把b添加到a的子节点中
def add(a, b):
global idx
e[idx] = b
ne[idx] = h[a]
h[a] = idx
idx += 1
n = int(input())
for _ in range(n-1):
a, b = map(int, input().split())
add(a, b) # 由于是无向边,因此要分别添加两者
add(b, a)
dfs(1) # 随便从哪个节点开始都可以
print(ans)