#icpc2013summerday4e. [icpc2013summer_day4_e]Optimal alpha beta pruning
[icpc2013summer_day4_e]Optimal alpha beta pruning
问题描述
抱歉,问题已经被修改。(12:51 JST)
Fox Ciel正在开发一个游戏的人工智能(AI)。这个游戏可以描述为一个有n个顶点的游戏树T。游戏中的每个节点都有一个评估值,用于显示当前情况的好坏程度。这个值等于子节点值的最大值乘以-1。叶节点上的值是由Ciel的特殊函数评估得出的 - 这个函数的计算比较复杂。因此,她打算使用Alpha-Beta剪枝来获取根节点的评估值,以减少需要计算的叶节点数。
顺便说一下,改变子节点的评估顺序会影响叶节点的计算次数。因此,Ciel想要知道在能够按任意顺序评估子节点时,在叶节点上计算的最小和最大次数。她请你计算最小评估次数和最大评估次数。
添加伪代码。(13:17 JST)
Ciel使用以下算法:
[注] 负最大值算法
输入
输入遵循以下格式:
... ... : : ...
第一行包含整数,表示游戏树T中的顶点数。
第二行包含个整数,表示顶点的评估值。
接下来的行包含游戏树T的信息。
是顶点的子节点数量,是顶点的子节点的索引。
输入满足以下约束条件:
-
-
-
-
-
根节点的索引为1。
-
除了叶节点外,评估值始终为0。这并不意味着非叶节点的评估值为0,如果需要的话,你必须计算它们。
-
叶节点有时具有评估值为0的情况。
-
游戏树T是一棵树结构。
输出
打印最小评估次数和最大评估次数的叶节点。
请在最小值和最大值之间用空格分开。