尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

题解:P7073 [CSP-J2020] 表达式

题解:P7073 [CSP-J2020] 表达式
📅 发布时间:2026/6/20 20:06:18

这道题是一道非常难的关于树的题目。

前置芝士

思路

我们要先字符串处理(也就是输入,预处理等事情。较简单,不在此描述了)。接着,我们在建一颗表达式树。我们假设在每次询问时,都修改表达式树,然后算出结果。这时我们会发现 TLE 了,因为每次遍历都是 \(\mathcal O(n q)\),所以我们用到了树形 DP。大多数题目树形 DP 都是从下往上做,但是这道题得从上往下做。然后我们假设 \(u\) 这个节点发生了变化,我们要看它的父亲节点是否有变化。如果没有,最后结果不变;如果父亲节点的值变了,就看这个父亲节点是否会导致父亲节点的父亲的值改变,然后一直做这个操作。最后我们把答案都预处理出来就好啦!

还有很多细节,看代码吧!

AC code:

#include <bits/stdc++.h>
using namespace std;
const int N=1010000;
struct node{int l,r;int type;int val;bool dp;
}a[N];
stack <int> s;
int n,m,q;
int p[N];
void dfs1(int u){if(a[u].type>0)return;if(a[u].type==-1){dfs1(a[u].l);a[u].val= !a[a[u].l].val;}else{dfs1(a[u].l);dfs1(a[u].r);if(a[u].type==-2)a[u].val=a[a[u].l].val & a[a[u].r].val;elsea[u].val=a[a[u].l].val | a[a[u].r].val;}
}
void dfs2(int u){if(a[u].type>0)return;int L=a[u].l,R=a[u].r;if(a[u].type==-1){a[L].dp=a[u].dp;dfs2(L);}else{if(a[u].type==-2){if(a[R].val==0)a[L].dp=false;else a[L].dp=a[u].dp;if(a[L].val==0)a[R].dp=false;else a[R].dp=a[u].dp;}else{if(a[R].val==1)a[L].dp=false;else a[L].dp=a[u].dp;if(a[L].val==1)a[R].dp=false;else a[R].dp=a[u].dp;}dfs2(L);dfs2(R);}
}
int main(){while(true){char ch; scanf("%c",&ch);if(ch=='x'){++n;int id=0;while(true){scanf("%c",&ch);if(ch>='0'&&ch<='9')id=id*10+ch-'0';else break;}a[n].type=id;p[id]=n;s.push(n);}else{assert((ch=='|')||(ch=='&')||(ch=='!'));if(ch=='|'||ch=='&'){++n;int r=s.top();s.pop();int l=s.top();s.pop();a[n].l=l;a[n].r=r;if(ch=='|')a[n].type=-3;else a[n].type=-2;s.push(n);}else{++n;int l=s.top();s.pop();a[n].l=l;a[n].type=-1;s.push(n);}scanf("%c",&ch);}if(ch!=' ')break;}int root=s.top();scanf("%d",&m);for(int i=1;i<=m;i++){int x;scanf("%d",&x);a[p[i]].val=x;}dfs1(root);a[root].dp=true;dfs2(root);scanf("%d",&q);for(int i=0;i<q;i++){int x;scanf("%d",&x);if(a[p[x]].dp)printf("%d\n",a[root].val^1);else printf("%d\n",a[root].val);}
}

相关新闻

  • PyWebIO文件管理全解析(高级技巧曝光):让上传下载更安全高效的秘诀
  • 题解:P14304 【MX-J27-T1】分块
  • DC宇宙蝙蝠洞通讯:戈登局长接到AI生成警报

最新新闻

  • 给智能体配私有知识库防瞎编实操清单
  • 【Web安全】从HNCTF 2022题解看常见Web漏洞实战利用与防御
  • 积木家装修的六好整装是什么?方案、效果、功能、质量、保障、价格全解析 - 资讯速览
  • 天河区专业搬家公司推荐 居民搬家企业搬迁全包服务指南 - 从来都是英雄出少年
  • R3nzSkin国服换肤工具完整指南:内存级皮肤修改实战应用
  • 2026无锡黄金回收商户权威排名 本地闲置黄金变现避雷手册 - 资讯速览

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号