#P16057. [Oni2022国家队选拔赛]Portocal

[Oni2022国家队选拔赛]Portocal

题目描述

给定一棵以 11 为根的树,共有 NN 个节点。每个节点都有一个 11MM 之间的自然数作为权值,但有些节点的权值尚未确定。

对于每个节点,Ana 会写下从根节点到该节点路径上所有节点权值组成的序列,顺序为从根到该节点。这样一共得到 NN 个序列,然后将这 NN 个序列按字典序排序。

现在给定一个长度为 KK 的序列

S=(S1,S2,,SK),S=(S_1,S_2,\ldots,S_K),

其中每个 SiS_i 也在 11MM 之间。Portocal 会从排序后的第一个序列开始每天检查一个序列,直到找到一个等于 SS 的序列。

Portocal 可以在 Ana 写序列之前,为所有尚未确定权值的节点赋值,赋值也必须在 11MM 之间。他希望尽可能早地找到序列 SS

需要回答以下两个问题之一:

  1. Portocal 最少需要多少天才能找到序列 SS
  2. 有多少种给缺失权值赋值的方式,可以达到这个最少天数。答案对 10000000091000000009 取模。

题目保证至少存在一种赋值方式,使得某个根到节点路径序列等于 SS

输入格式

第一行输入一个整数 CC

  • C=1C=1,要求回答第一个问题;
  • C=2C=2,要求回答第二个问题。

第二行输入三个整数 N,M,KN,M,K

第三行输入 NN 个整数 val1,val2,,valNval_1,val_2,\ldots,val_N,表示节点权值。若 vali=1val_i=-1,表示节点 ii 尚未确定权值。

第四行输入 KK 个整数,表示序列 SS

接下来 N1N-1 行,每行输入两个整数 u,vu,v,表示树上的一条边。

输出格式

输出一个整数,表示根据 CC 的值对应的答案。

数据范围与约束

  • C{1,2}C\in\{1,2\}
  • 1KN5000001\le K\le N\le 500000
  • 1M5000001\le M\le 500000
  • 对所有 1iN1\le i\le N1valiM1\le val_i\le Mvali=1val_i=-1
  • 对所有 1iK1\le i\le K1SiM1\le S_i\le M

子任务

子任务 分值 限制
1 8 C=1,N13,M3C=1,N\le 13,M\le 3
2 19 C=1,N5000C=1,N\le 5000
3 22 C=1C=1
4 11 C=2,N13,M3C=2,N\le 13,M\le 3
5 40 C=2C=2

样例 1

输入

1
8 3 3
-1 -1 2 -1 -1 -1 1 2
1 2 2
1 2
2 3
2 4
4 5
1 6
6 7
1 8

输出

4

解释

一种最优赋值为:

1 2 2 2 1 3 1 2

此时按字典序最靠前的几个序列为:

1       对应节点 1
1 2     对应节点 2
1 2     对应节点 8
1 2 2   对应节点 3,等于 S

因此最少第 44 天找到 SS

注意,虽然节点 44 对应的序列也等于 SS,但 Portocal 会在找到第一个等于 SS 的序列时停止。

样例 2

输入

2
8 3 3
-1 -1 2 -1 -1 -1 1 2
1 2 2
1 2
2 3
2 4
4 5
1 6
6 7
1 8

输出

6

解释

共有 66 种赋值方式可以让 Portocal 在第 44 天找到序列 SS

1 2 2 2 1 3 1 2
1 2 2 3 1 3 1 2
1 2 2 2 2 3 1 2
1 2 2 3 2 3 1 2
1 2 2 2 3 3 1 2
1 2 2 3 3 3 1 2