CFCF2164F2.Chain Prefix Rank (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

这是该问题的难度较高版本。不同之处在于,本题中 n5105n \leq 5 \cdot 10^5。仅当你解决了该问题的所有版本后,才能进行 Hack。

给定一棵有 nn 个结点、以 11 号结点为根的树 TT,以及一个长度为 nn 的序列 aa,请统计有多少个长度为 nn 的排列 pp 满足如下条件:

  • 对于所有 1un1 \leq u \leq n,恰好有 aua_u 个结点 vv 满足 vv 是树 TTuu 的祖先,且 pv<pup_v < p_u

输出方案数对 998244353998\,244\,353 取模的结果。输入数据保证至少存在一个合法的排列。

^\text{∗} 长度为 nn 的排列是指由 11nn 的所有整数恰好出现一次组成的序列。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(22 出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 却有 44 出现)。

输入格式

每组数据包含多个测试用例。第一行包含一个整数 tt1t50001 \leq t \leq 5000),表示测试用例数。

接下来依次描述每个测试用例:

第一行为一个整数 nn2n51052 \leq n \leq 5 \cdot 10^5),表示树的结点数。

第二行为 n1n-1 个整数 fa2,fa3,,fanfa_2,fa_3,\ldots,fa_n1fai<i1 \leq fa_i < i),其中 faifa_i 表示节点 ii 在树 TT 中的父节点。

第三行为 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n0ai<n0 \leq a_i < n)。

保证所有测试用例中的 nn 之和不超过 51055 \cdot 10^5。输入数据保证至少存在一个合法的排列。

输出格式

对于每个测试用例,输出一个整数,表示合法排列的方案数,答案需对 998244353998\,244\,353 取模。

输入输出样例

  • 输入#1

    3
    5
    1 2 3 4
    0 1 2 3 4
    5
    1 2 1 1
    0 1 0 0 0
    8
    1 1 3 3 4 5 7
    0 0 1 0 1 3 3 1

    输出#1

    1
    6
    4

说明/提示

可视化链接

在第一个样例中,唯一满足条件的排列为 [1,2,3,4,5][1,2,3,4,5]

在第二个样例中,满足条件的排列有 [4,5,1,2,3][4,5,1,2,3][4,5,1,3,2][4,5,1,3,2][4,5,2,1,3][4,5,2,1,3][4,5,2,3,1][4,5,2,3,1][4,5,3,1,2][4,5,3,1,2][4,5,3,2,1][4,5,3,2,1]

在第三个样例中,满足条件的排列有 [3,1,6,2,5,7,8,4][3,1,6,2,5,7,8,4][3,1,6,2,5,8,7,4][3,1,6,2,5,8,7,4][3,2,6,1,5,7,8,4][3,2,6,1,5,7,8,4][3,2,6,1,5,8,7,4][3,2,6,1,5,8,7,4]

首页