本题就是一个原题:979. 在二叉树中分配硬币 的改编。AC代码如下
import sys
sys.setrecursionlimit(2000000)
def dfs(node, parent):
global res
小欧有一棵包含n个结点的树,每个结点有一个人,处在第i个结点的人想吃恰好i个苹果。但他手里有ai个苹果,可能不够吃,也可能太多了。他们每次传递可以向树上相邻的结点传递1个苹果,小欧想知道,让所有人都恰好获得他想吃的苹果的数量总共需要有多少次传递?
第一行输入一个整数n(1≤n≤105)。
第二行输入n个整数ai,保证所有ai都为非负整数,且和恰好等于2n×(n+1)
接下来n−1行,每一行输出两个整数u,v(1<u,v≤n),表示结点u和结点v有一条边。
一行一个整数,表示最小次数。
输入
4
3 1 4 2
1 2
1 3
2 4
输出
6
说明
结点3传递1次苹果给结点1。此时苹果数量为[4,1,3,2]。
结点1传递共3次苹果给结点2。此时苹果数量为[1,4,3,2]
结点2传递共2次苹果给结点4。此时苹果数量为[1,2,3,4]。