题库/YBT00395

#YBT00395. 树上取石子

    传统题 难度: 普及 标签>一本通选或不选的树形DP
时间限制1000 ms
内存限制256 MiB
通过率100%1 / 1 次提交
题目描述 查看题解 开始编程Alt+E

YBT00395 · 树上取石子

退出在线编程模式
普及 读懂题意,让每一次思考成为成长。
时间限制1000 ms
内存限制256 MiB
通过率100%1 / 1 次提交

题目描述

Alice和Bob想比比谁能够收集到最多的石子数量。 Alice将石子分成了nn堆(编号1…n1…n),并且规定了它们的选取顺序,刚好形成一颗有向树。在游戏过程中,两人从根节点开始,轮流取走石子(一次取一堆),当一个人取走结点ii的石子后,另一个人只能从结点ii的儿子节点中选取一个。当取到叶子结点时游戏结束。 然后两人会比较自己得到的石子数量。已知两人采用的策略不同,Alice希望在让Bob取得尽可能少的前提下,自己取得最多;而Bob希望在自己取得尽可能多的前提下,让Alice取得最少。在两人都采取最优策略的情况下,请你计算出游戏结束时两人的石子数量。 游戏总是Alice先取,保证只存在一组解。

输入

第一行包含一个正整数nn,表示石子堆数。 第二行包含nn个整数,其中第ii个数表示第ii堆石子的数量num[i]num[i]。 接下来n−1n-1行,每行包含两个正整数uu和vv,表示结点uu为结点vv的父亲。

输出

一行两个整数,表示Alice和Bob分别取得的石子数。

输入样例

6
4 16 16 5 3 1
1 2
2 4
1 3
3 5
3 6

输出样例

7 16

提示

【样例解释】 首先Alice一定能取得结点11的44个石子。 留给Bob的是结点22和33,Bob均能得到1616个石子。若选取结点22则Alice接下来共可获得55个石子,而选择33,Alice可得到33个石子,所以此时Bob会选择结点33; 故Alice最后得到的石子数为77,Bob为1616。 【数据规模与约定】 对于30%的数据,1≤n≤100,1≤num[i]≤1001≤n≤100,1≤num[i]≤100。 对于60%的数据,1≤n≤10,000,1≤num[i]≤1041≤n≤10,000,1≤num[i]≤10^4。 对于100%的数据,1≤n≤105,1≤num[i]≤1041≤n≤10^5,1≤num[i]≤10^4。保证两人得到的石子总数在[0,231)[0,2^{31})。

评测数据说明

本题使用按题意独立构造、以独立程序核对的训练数据及公开样例,共8个测试点,非原站或官方原始数据。总分100分。

题目信息

#1823
100%

1 次通过 · 1 次提交

练习难度 普及
时间限制
1000ms
内存限制
256MiB

题目标签

暂无标签
上传者