luogu#P11540. [Code+#5] 逻辑树
[Code+#5] 逻辑树
题目背景
题目来源:link。
题目描述
有一棵树,叫逻辑树。
这个树有根,有 个节点,其中 个叶子,每个非叶节点恰好有两个孩子。
每个叶子上有一个 01 变量,它的取值可能为 True 或 False。每个非叶节点上有一个逻辑运算符,这个运算可能为 AND 或者 OR。
一个非叶节点的取值定义为它两个儿子的取值,作这个节点上的运算得到的结果。
有一个黑恶势力想知道这个树的根节点的取值,他准备了一个长度为 的询问序列 ,每个叶子在这个序列中恰好出现一次。
黑恶势力会依次询问这些叶子的值,但是,如果他发现某一次询问是不必要的,那么他会跳过这个无意义的询问(为了帮助理解,考虑 x AND y 在我们知道 x 为 False 之后,不必知道 y 的值就可推算 x AND y 的值)。
当然,邪恶总是能战胜正义,黑恶势力总能达到他的目的。但是我们可以拖慢他的节奏,你现在可以安排每个叶子的权值,使得黑恶势力询问的次数尽可能多,在此基础上,我们希望这个树的根节点取值尽量为 True。
请你计算一组解,任何一种合法方案都是可以接受的。
输入格式
第一行一个整数 ,意义如题面所示。
接下来一行 个整数,第 个数代表节点 上的运算符,其中 表示 AND
, 表示 OR
。
接下来 行,每行两个整数,描述一条边。
最后一行 个整数,表示黑恶势力的询问序列。
你可以认为 是叶子, 是非叶节点,且 是根,输入数据保证每个非叶节点有两个孩子。
输出格式
输出一个长度为 的 01串 ,其中 表示第 个叶子的取值, 为 False, 为 True.
4
0 1 0
5 6
5 7
6 1
6 2
7 3
7 4
4 2 3 1
1011
提示
数据范围:
$\def\arraystretch{1.21} \begin{array}{|c|c|c|}\hline \bold{\small{子任务}}&\textbf{score}&\textbf{constraints}\\\hline \text{A}&40&\small{树的高度不超过 50}\\\hline \text{B}&60&\small{无特殊限制}\\\hline \end{array}$
对于所有数据,。
对于所有数据,保证 ,,, 互不相等。