P11540 [Code+#5] 逻辑树

题目背景

**题目来源:**[link](https://www.gitlink.org.cn/thusaa/codeplus5)。

题目描述

有一棵树,叫逻辑树。 这个树有根,有 $2N-1$ 个节点,其中 $N$ 个叶子,每个非叶节点恰好有两个孩子。 每个叶子上有一个 01 变量,它的取值可能为 True 或 False。每个非叶节点上有一个逻辑运算符,这个运算可能为 AND 或者 OR。 一个非叶节点的取值定义为它两个儿子的取值,作这个节点上的运算得到的结果。 有一个黑恶势力想知道这个树的根节点的取值,他准备了一个长度为 $N$ 的询问序列 $\{P_i\}$,每个叶子在这个序列中恰好出现一次。 黑恶势力会依次询问这些叶子的值,**但是**,如果他发现某一次询问是不必要的,那么他会跳过这个无意义的询问(为了帮助理解,考虑 x AND y 在我们知道 x 为 False 之后,不必知道 y 的值就可推算 x AND y 的值)。 当然,邪恶总是能战胜正义,黑恶势力总能达到他的目的。但是我们可以拖慢他的节奏,你现在可以安排每个叶子的权值,使得黑恶势力询问的次数尽可能多,在此基础上,我们希望这个树的根节点取值尽量为 True。 请你计算一组解,任何一种合法方案都是可以接受的。

输入格式

第一行一个整数 $N$,意义如题面所示。 接下来一行 $N-1$ 个整数,第 $i$ 个数代表节点 $N+i$ 上的运算符,其中 $0$ 表示 `AND`,$1$ 表示 `OR`。 接下来 $2N-2$ 行,每行两个整数,描述一条边。 最后一行 $N$ 个整数,表示黑恶势力的询问序列。 你可以认为 $1\sim N$ 是叶子,$N+1\sim 2N-1$ 是非叶节点,且 $N+1$ 是根,输入数据保证每个非叶节点有两个孩子。

输出格式

输出一个长度为 $N$ 的 01串 $S$,其中 $S_i$ 表示第 $i$ 个叶子的取值,$0$ 为 False, $1$ 为 True.

说明/提示

**数据范围:** $\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}$ 对于所有数据,$N\le 5\times 10^5$。 对于所有数据,保证 $1\le m