体育场突然着火了,现场需要紧急疏散,但是过道真的是太窄了,同时只能容许一个人通过。现在知道了体育场的所有座位分布,座位分布图是一棵树,已知每个座位上都坐了一个人,安全出口在树的根部,也就是1号结点的位置上。其他节点上的人每秒都能向树根部前进一个结点,但是除了安全出口以外,没有任何一个结点可以同时容纳两个及以上的人,这就需要一种策略,来使得人群尽快疏散,问在采取最优策略的情况下,体育场最快可以在多长时间内疏散完成。
数据范围:
第一行包含一个正整数n,即树的结点数量。 接下来有n-1行,每行有两个正整数x,y,表示在x和y结点之间存在一条边。(1<=x,y<=n)
输出仅包含一个正整数,表示所需要的最短时间
6 2 1 3 2 4 3 5 2 6 1
4
from collections import defaultdict tree = defaultdict(list) n = int(input()) for _ in range(n-1): x,y = map(int,input().split()) tree[x].append(y) tree[y].append(x) def bfs(node,tree): c = 1 queue = [node] visited = set() visited.add(1) visited.add(node) while queue: tmp = queue.pop(0) for d in tree[tmp]: if d not in visited: c+=1 queue.append(d) visited.add(d) return c max_value = 0 for node in tree[1]: max_value = max(bfs(node,tree),max_value) print(max_value)
# 为啥只能过80%呢 N = int(input()) graph = [set() for _ in range(N+1)] for i in range(N-1): a, b= list(map(int, input().split())) graph[a].add(b) graph[b].add(a) def dfs(index): if len(graph[index])==0: return 1 count = 1 while len(graph[index]) > 0: ind = graph[index].pop() graph[ind].remove(index) count += dfs(ind) return count res = -1 while len(graph[1]) > 0: ind = graph[1].pop() graph[ind].remove(1) res = max(res, dfs(ind)) print(res)