Untitled
unknown
plain_text
3 years ago
1.6 kB
6
Indexable
from collections import deque import copy def BFS(graph, is_in_deque, source, layer): queue = deque() queue.append(1) is_in_deque[1] = True layer[1] = 0 while len(queue): from_ = queue.popleft() add = 0 for to in graph[from_]: if not is_in_deque[to]: source[to].append(from_) is_in_deque[to] = True queue.append(to) add += 1 layer[to] = layer[from_]+1 if add == 0: ans_lst[from_] += num_lst[from_] ans_lst[1] += sum(num_lst) print(source) # 每個node的上面一個node的位置 print(layer) # 每個node所在層數 print(ans_lst) result_lst = copy.deepcopy(ans_lst) for i in range(1, len(layer)-1): # 下往上加 if result_lst[i] == 0: max_place = layer.index(max(layer)) ans_lst[max_place] += num_lst[max_place] layer[max_place] = -1 ans_lst[source[max_place][0]] += ans_lst[max_place] # ans_lst[1] += num_lst[1] n = int(input()) ans_lst = [0 for _ in range(n+1)] num_lst = list(map(int, input().split())) num_lst.insert(0, 0) tree = [[] for _ in range(n+1)] for i in range(n-1): u, v = map(int, input().split()) tree[u].append(v) tree[v].append(u) source = [[] for _ in range(n+1)] is_in_deque = [False for _ in range(n + 1)] layer = [-1 for _ in range(n + 1)] BFS(tree, is_in_deque, source, layer) for i in range(1, len(ans_lst)): print(ans_lst[i], end=' ')
Editor is loading...