题目 1818

树上取石子

查看题解 ↗GitHub ↗如何评测
题号
1818
时间限制
1000 ms
内存限制
256 MB
标签
数学
来源
信息学奥赛一本通 · 高手训练篇·六、数学基础(高手训练)

【题目描述】

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})。

数据下载

题目 1818 的公开数据

正在读取文件列表…

常用命令

题目 1818 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。