AT_past17_f.構文木

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一棵 NN 个结点的二叉树,编号为 11 到 NN。根结点为 11 号结点,对于第 ii 个结点(2≤i≤N2 \leq i \leq N),其父亲为 pip_i。每个结点的子结点数要么为 00,要么为 22。

第 ii 个结点上写有 SiS_i。SiS_i 可以是一个整数,也可以是一个字符。如果该结点是叶子结点,则 SiS_i 是一个整数;否则,SiS_i 为“+”或“x”。

你会不断重复下面两种操作中的任意一个,知道无法再进行为止:

  • 选择一个写有“+”的结点,其两个子结点上都写有整数。设这两个整数为 aa 和 bb。将该结点上的“+”替换为 a+ba+b,并删除这两个子结点。
  • 选择一个写有“x”的结点,其两个子结点上都写有整数。设这两个整数为 aa 和 bb。将该结点上的“x”替换为 a×ba \times b,并删除这两个子结点。

最终,树上只会剩下一个结点且上面写有一个整数。请输出这个整数对 998244353998244353 取模的结果。(可以证明,无论操作顺序如何,最终结果唯一。)

输入格式

输入按下列格式给出:

NN p2p_2 p3p_3 …\dots pNp_N S1S_1 S2S_2 …\dots SNS_N

输出格式

输出答案。

输入输出样例

  • 输入#1

    5
    1 1 2 2
    + x 3 2 5

    输出#1

    13
  • 输入#2

    7
    1 2 1 4 4 2
    x + 31415 + 92653 58979 32384

    输出#2

    689770791

说明/提示

样例解释 1

通过以下步骤,最终会剩下一个结点,上面写着 1313,因此答案为 1313。

  • 选择结点 22,将其“x”替换为 2×5=102 \times 5 = 10,并删除结点 44 和 55。
  • 选择结点 11,将其“+”替换为 10+3=1310 + 3 = 13,并删除结点 22 和 33。

样例解释 2

请注意最后输出时需要对 998244353998244353 取模。

约束条件

  • 1≤N≤2×1051 \leq N \leq 2 \times 10^5
  • 1≤pi≤i−11 \leq p_i \leq i-1,对于 2≤i≤N2 \leq i \leq N
  • 每个结点在 p2,p3,…,pNp_2, p_3, \dots, p_N 中出现次数要么为 00 次要么为 22 次。
  • SiS_i 满足:
    • 如果第 ii 个结点是叶子结点,SiS_i 是 11 到 10810^8 之间的一个整数;
    • 如果第 ii 个结点不是叶子结点,SiS_i 为“+”或“x”。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页