题意:给你一个门电路(包含XOR、OR、AND、NOT、IN五种),这个门电路构成了一棵树,其中1号是输出端(根),所有的叶子都是输入端,给出每个节点(门)的功能以及输入端的输入(是0还是1),求出在只改变任何一个输入端的情况下,输出端分别输出1还是0

只关心AND门和OR门,对于AND门,如果左儿子值为0,那么右子树所有叶子值的改变都不会影响输出,如果右儿子值为0,那么左子树所有叶子值的改变都不会影响输出,对于OR门同理

所以只要1~2遍DFS就可以求出每一个叶子的改变是否对答案产生影响

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef struct
{int x, y, id;char str[15];
}Point;
Point s[1000005];
int ans[1000005], flag[1000005];
int Sech(int u)
{int i, p1, p2;if(s[u].str[1]=='I')return s[u].x;if(s[u].str[1]=='N')return Sech(s[u].x)^1;if(s[u].str[1]=='X')return Sech(s[u].x)^Sech(s[u].y);if(s[u].str[1]=='A'){p1 = Sech(s[u].x), p2 = Sech(s[u].y);if(p1==0)flag[s[u].y] = 1;if(p2==0)flag[s[u].x] = 1;return p1&p2;}if(s[u].str[1]=='O'){p1 = Sech(s[u].x), p2 = Sech(s[u].y);if(p1==1)flag[s[u].y] = 1;if(p2==1)flag[s[u].x] = 1;return p1|p2;}printf("WA\n");return -1;
}
void Sech2(int u)
{int i, p1, p2;if(flag[u])return;if(s[u].str[1]=='I')ans[s[u].id] = 1;if(s[u].str[1]=='N')Sech2(s[u].x);if(s[u].str[1]=='X' || s[u].str[1]=='A' || s[u].str[1]=='O'){Sech2(s[u].x);Sech2(s[u].y);}
}
int main(void)
{int n, i, now;scanf("%d", &n);memset(ans, -1, sizeof(ans));for(i=1;i<=n;i++){scanf("%s", s[i].str+1);if(s[i].str[1]=='I' || s[i].str[1]=='N')scanf("%d", &s[i].x);elsescanf("%d%d", &s[i].x, &s[i].y);s[i].id = i;if(s[i].str[1]=='I')ans[i] = 0;}now = Sech(1);Sech2(1);for(i=1;i<=n;i++){if(ans[i]==-1)continue;printf("%d", now^ans[i]);}puts("");return 0;
}

Codeforces Round #499 (Div. 2): F. Mars rover(DFS)相关推荐

  1. Codeforces Round #506 (Div. 3) - F. Multicolored Markers (思维)

    题意 给两种颜色的数量 a 和 b,这两种颜色恰好组成一个长方形,而且至少有一种颜色在整个长方形里面也是个长方形,求满足条件中周长最小的情况 AC 当a是里面的小长方形,把a能组成的长方形的宽记录一下 ...

  2. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  3. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)

    F. Strange Housing 题意 有 nnn 个点和 mmm 条边,对点进行染色.要求一条边的两个点不能都染色,并且删除两端都没有染色的边之后,图连通.请给出一种染色方案. 题解 暴力贪心即 ...

  4. Codeforces Round #686 (Div. 3) F. Array Partition(二分+线段树)

    题意:一段区间,让你分割成三段,第一段取max,第二段取min,第三段取max.问你怎么分割这个区间. 题解: 三个区间我们可以用两个点将一段区间分成三段区间. 二分:我们首先找这个题有关的单调性,我 ...

  5. Codeforces Round #548 (Div. 2) C. Edgy Trees(dfs || 并查集)

    题目链接:https://codeforces.com/contest/1139/problem/C 题意:给了一棵树,n个点,m条边.让从中选k个点,使得从a1到a2,a2到a3,ak-1到ak的路 ...

  6. [Codeforces Round #194 (Div. 2)] Secret 解题报告 (数学)

    题目链接:http://codeforces.com/problemset/problem/334/C 题目: 题目大意: 给定数字n,要求构建一个数列使得数列的每一个元素的值都是3的次方,数列之和S ...

  7. Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!(AB)

    Johnny and Ancient Computer CodeForces - 1362A 思路:因为除或者乘的都是2的幂次,所以看看二者的商是不是2的幂次就可以了.如果是的话,就3,2,1依次就行 ...

  8. Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)

    题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...

  9. Codeforces Round #521 (Div. 3) B - Disturbed People (贪心)

    题目链接:http://codeforces.com/contest/1077/problem/B 题意:给你一长度为n的01序列.0表示当前位置的房子灯是灭的,1表示当前房子的位置灯是亮的.判断某个 ...

最新文章

  1. ProtoBuf格式详解
  2. PostgreSQL索引走错一例分析
  3. C++拷贝构造函数的参数为什么必须使用引用类型(无限递归)
  4. css 不换行_CSS样式更改——文本Content
  5. 新书进展和我的决定。
  6. html扇形调节角度,CSS如何实现任意角度的扇形(代码示例)
  7. ios 语言本地化处理
  8. pl/sql developer安装配置
  9. emule学习与分析一 概述
  10. 聊聊kafka consumer offset lag的监控
  11. eclipse搭建javaweb开发环境
  12. 数值分析实验报告 matlab,数值分析方法与实验基于MATLAB实现
  13. windows杀进程
  14. 大学毕业必须知道的东西:三方协议、报到证(派遣证)、干部身份
  15. 安卓真机如何连接本地服务器_Android真机测试 连接本地服务器 手机测试访问本地服务器 android通过电脑上网...
  16. (四)Python中随机森林的实现与解释
  17. 2015 上海邀请赛c题 calculator hdu5238
  18. 关于Windows许可证过期解决方案
  19. KSImageNamed 安装后无效解决方法 亲测有用
  20. 别把激励员工变成收买员工

热门文章

  1. python培训班靠谱吗-上海比较靠谱的Python培训机构
  2. python入门教程pdf-《python基础教程(第3版)》高清版PDF免费下载
  3. python怎么读写文件-python读写文件
  4. 语音识别中的CTC算法的基本原理解释
  5. Android语音识别开发详解(基于讯飞语音SDK)
  6. 使用 CSS 模拟鼠标点击交互
  7. JS获取对象的第一个值
  8. 苹果充电线android头断了,苹果充电线又坏了?其实一招就能搞定!还不花1分钱......
  9. 人脸识别撞脸名画_范冰冰深夜晒自拍撞脸荷兰名画,三万元名牌包抢镜,两套餐具亮了...
  10. JMX监测JVM报错