【题目描述】
Alice和Bob想比比谁能够收集到最多的石子数量。
Alice将石子分成了n堆(编号1…n),并且规定了它们的选取顺序,刚好形成一颗有向树。在游戏过程中,两人从根节点开始,轮流取走石子(一次取一堆),当一个人取走结点i的石子后,另一个人只能从结点i的儿子节点中选取一个。当取到叶子结点时游戏结束。
然后两人会比较自己得到的石子数量。已知两人采用的策略不同,Alice希望在让Bob取得尽可能少的前提下,自己取得最多;而Bob希望在自己取得尽可能多的前提下,让Alice取得最少。在两人都采取最优策略的情况下,请你计算出游戏结束时两人的石子数量。
游戏总是Alice先取,保证只存在一组解。
【输入】
第一行包含一个正整数n,表示石子堆数。
第二行包含n个整数,其中第i个数表示第i堆石子的数量num[i]。
接下来n−1行,每行包含两个正整数u和v,表示结点u为结点v的父亲。
【输出】
一行两个整数,表示Alice和Bob分别取得的石子数。
【输入样例】
文本
6
4 16 16 5 3 1
1 2
2 4
1 3
3 5
3 6
【输出样例】
【提示】
【样例解释】
首先Alice一定能取得结点1的4个石子。
留给Bob的是结点2和3,Bob均能得到16个石子。若选取结点2则Alice接下来共可获得5个石子,而选择3,Alice可得到3个石子,所以此时Bob会选择结点3;
故Alice最后得到的石子数为7,Bob为16。
【数据规模与约定】
对于30%的数据,1≤n≤100,1≤num[i]≤100。
对于60%的数据,1≤n≤10,000,1≤num[i]≤104。
对于100%的数据,1≤n≤105,1≤num[i]≤104。保证两人得到的石子总数在[0,231)。