1 条题解
-
0
题解
核心思路:表达式树与影响传播
后缀表达式用栈建树。先计算每个结点的值,再从根向叶传播“该子树改变是否会改变最终答案”。例如与结点的左儿子只有在右儿子为 1 时才有影响。每个变量恰好出现一次,因此询问只需判断该变量是否有影响。
算法流程
- 读入题目给出的全部数据,并初始化核心状态。
- 执行本题的关键处理:后缀表达式用栈建树。先计算每个结点的值,再从根向叶传播“该子树改变是否会改变最终答案”。例如与结点的左儿子只有在右儿子为 1 时才有影响。每个变量恰好出现一次,因此询问只需判断该变量是否有影响。
- 根据最终状态输出答案。边界、计数和中间结果使用能够覆盖题目上限的数据类型;完整实现见
std/main.cpp。
正确性说明
核心状态只保存影响后续决策的全部信息;每次转移(或贪心选择)都与题意中的一次合法操作一一对应,且不会遗漏更优候选。因此处理结束时得到的状态恰好覆盖全部合法方案,其中所取最优值就是题目要求的答案。
复杂度
- 时间复杂度:
- 空间复杂度:
- 1
信息
- ID
- CSPJ2020T3
- 时间
- 1000ms
- 内存
- 256MiB
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者