CF2081E.Quantifier

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述

给定一棵包含 n+1n+1 个节点的有根树,节点编号为 00 到 nn,其中根节点为 00,其唯一的子节点是 11。现有 mm 个不同芯片,编号为 11 到 mm,每个芯片颜色为黑色或白色。初始时,这些芯片按编号升序从上到下排列在边 (0,1)(0,1) 上。

芯片的初始位置。树节点以蓝色显示。你可以按任意顺序执行以下操作任意次(包括零次):

  1. 选择两条边 (u,v)(u,v) 和 (v,w)(v,w),其中 uu 是 vv 的父节点,vv 是 ww 的父节点,且边 (u,v)(u,v) 上至少有一个芯片。将边 (u,v)(u,v) 上的最底部芯片移动到边 (v,w)(v,w) 的最顶部位置(即置于该边所有现有芯片之上)。
  2. 选择两条边 (u,v)(u,v) 和 (v,w)(v,w),其中 uu 是 vv 的父节点,vv 是 ww 的父节点,且边 (v,w)(v,w) 上至少有一个芯片。将边 (v,w)(v,w) 上的最顶部芯片移动到边 (u,v)(u,v) 的最底部位置(即置于该边所有现有芯片之下)。
  3. 选择同一边上两个相邻的同色芯片,交换它们的位置。

允许的操作。每个芯片 ii 有一个移动范围,定义为从根节点到节点 did_i 的简单路径上的所有边。操作过程中必须确保没有芯片被移动到其移动范围之外的边上。

最终,你需要将所有芯片移回边 (0,1)(0,1)。可以发现芯片的顺序可能发生变化。请计算最终边 (0,1)(0,1) 上芯片排列的可能方案数对 998 244 353998\,244\,353 取模的结果。

芯片的排列定义为从顶到底的芯片编号组成的长度为 mm 的序列。

输入格式

每个测试包含多个测试用例。第一行输入测试用例数量 tt(1≤t≤50001 \le t \le 5000)。接下来描述每个测试用例。

每个测试用例的第一行包含两个整数 nn 和 mm(1≤n,m≤50001 \le n, m \le 5000)——树的大小减一(即树有 n+1n+1 个节点)和芯片数量。

第二行包含 nn 个整数 p1,p2,…,pnp_1, p_2, \ldots, p_n(0≤pi<i0 \le p_i < i)——节点 11 到 nn 的父节点。保证当且仅当 i=1i=1 时 pi=0p_i = 0(根的唯一子节点是 11)。

第三行包含 mm 个整数 c1,c2,…,cmc_1, c_2, \ldots, c_m(ci∈{0,1}c_i \in \{0, 1\})——每个芯片的颜色(00 表示黑色,11 表示白色)。

第四行包含 mm 个整数 d1,d2,…,dmd_1, d_2, \ldots, d_m(1≤di≤n1 \le d_i \le n)——每个芯片的移动范围。

保证所有测试用例的 nn 总和不超过 50005000,mm 总和不超过 50005000。

输出格式

对于每个测试用例,输出一个整数——可能排列数对 998 244 353998\,244\,353 取模的结果。

输入输出样例

  • 输入#1

    4
    3 2
    0 1 1
    0 1
    2 3
    4 4
    0 1 1 2
    0 0 1 1
    1 2 3 3
    6 6
    0 1 1 1 4 5
    0 0 0 0 1 1
    5 6 1 2 4 3
    16 15
    0 1 1 3 1 3 4 3 3 7 1 6 11 5 8 10
    1 0 1 1 0 1 1 1 1 0 1 1 0 0 0
    12 14 13 10 9 16 11 14 13 15 16 10 2 2 5

    输出#1

    2
    8
    108
    328459046

说明/提示

第一个测试用例中,可以达成 22 种排列:(1,2) 和 (2,1)。

第二个测试用例中,可以达成 88 种排列:(1,2,3,4)、(1,2,4,3)、(1,3,2,4)、(1,3,4,2)、(1,4,2,3)、(1,4,3,2)、(2,1,3,4) 和 (2,1,4,3)。

翻译由 DeepSeek R1 完成

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

首页