CF1010D Mars rover

题目描述

Natasha 驾驶着火星车在火星上旅行。但突然,火星车坏了,具体来说——是内部的逻辑电路出了问题。该电路是一个无向树(连通无环图),以顶点 $1$ 为根,其中每个叶子节点(不包括根)是一个输入,其余所有顶点都是逻辑元件,包括根节点,根节点作为输出。每个输入端会输入一个比特,输出端会输出一个比特。 逻辑元件共有四种类型:[AND](https://en.wikipedia.org/wiki/Logical_conjunction)($2$ 个输入)、[OR](https://en.wikipedia.org/wiki/Logical_disjunction)($2$ 个输入)、[XOR](https://en.wikipedia.org/wiki/Exclusive_or)($2$ 个输入)、[NOT](https://en.wikipedia.org/wiki/Negation)($1$ 个输入)。逻辑元件从其直接子节点(输入)获取值,并返回其对应逻辑函数的结果。Natasha 已经知道了火星车的逻辑电路结构,并且知道只有一个输入端出现了故障。为了修好火星车,她需要改变这个输入端的值。 对于每个输入端,判断如果 Natasha 改变该输入端的值,最终输出会是多少。

输入格式

第一行包含一个整数 $n$($2 \le n \le 10^6$),表示图中顶点的数量(包括输入端和逻辑元件)。 接下来的 $n$ 行中,第 $i$ 行描述第 $i$ 个顶点:第一项为 "AND"、"OR"、"XOR"、"NOT" 或 "IN"(表示该顶点为输入端),如果该顶点为 "IN",则接下来是该输入端的值($0$ 或 $1$);否则,接下来是该逻辑元件的输入顶点编号:"AND"、"OR"、"XOR" 有 $2$ 个输入,"NOT" 有 $1$ 个输入。顶点编号从 $1$ 开始。 保证输入数据描述的是一个合法的逻辑电路,且输出由顶点 $1$ 产生。

输出格式

输出一个仅包含字符 '0' 和 '1' 的字符串——对于每个输入端,按照其顶点编号递增的顺序,输出 Natasha 改变该输入端值后,最终输出端的值。

说明/提示

示例中的原始电路(在未改变输入时)如下图所示: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1010D/12e9ee861137e7cc1d9adb641b01a0e9e6b988c2.png) 绿色表示比特 '1',黄色表示比特 '0'。 如果 Natasha 将输入比特 $2$ 改为 $0$,则输出为 $1$。 如果 Natasha 将输入比特 $3$ 改为 $0$,则输出为 $0$。 如果 Natasha 将输入比特 $6$ 改为 $1$,则输出为 $1$。 如果 Natasha 将输入比特 $8$ 改为 $0$,则输出为 $1$。 如果 Natasha 将输入比特 $9$ 改为 $0$,则输出为 $0$。 由 ChatGPT 4.1 翻译