题目大意:
给出一颗根结点为1的树,每个结点最多有两个叶子结点,每个结点的值非0即1。
现在给出部分结点的值(0或1),剩余结点告诉你它们值和子结点值的关系(AND、OR、XOR、NOT)。
现在要你求的内容是按照输入顺序依次改变初始时给出的结点的值(0变为1,1变为0),问每次改变后的根结点的值是多少。
解题思路:
首先根据给出的关系我们可以求出每个结点初始状态的值,后面怎么做呢?我们可以挨个枚举每个点变化后的情况如果枚举变化情况的话TLE无疑。
观察最后的值发现,答案非0即1,每个结点的值都是这样。那么我们可以不用模拟整个过程,而是记录到某个结点时它的值是否改变了,举个例子的话就是当这个结点是由前面两个结点AND得来的,正好有个结点是0,此时1所在结点的那个分支不论怎么变到这个位置出结果都是0。根据这个思想,我们再对这棵树进行一次DFS做下标记就可以了。
Mycode:
1 |
|