C1660 [Wannafly冬令营2018Day3]最大独立集

内存限制:256 MB 时间限制:1000 ms

题目描述

树上最大独立集是个非常简单的问题,可怜想让它变得稍微难一点。

可怜最开始有一棵 $n$ 个点无根树 $T$,令 $T(i)$ 为将点 $i$ 作为根后得到的有根树。

可怜用 $m$ 次操作构造了 $m+1$ 棵树 $T'_0$ 至 $T'_m$,其中 $T'_0 = T(1)$。第 $i$ 次操作,可怜选择了一个节点 $k_i$,它用如下的方式构造了 $T'_i$:

  • 新建一棵和 $T(k_i)$ 一样的有根树 $T_b$。
  • 新建 $n$ 棵和 $T'_{i-1}$ 一样的有根树,并将第 $j$ 棵树的根节点的父亲设置为 $T_b$ 中第 $j$ 个点,即加上一条连接它们的边。
  • 这样就得到了一个点数为 $\text{size}(T(k_i)) + n\times \text{size}(T'_{i-1})$ 的树 $T_i$,它的根节点是 $T_b$ 中的节点 $k_i$。

现在可怜希望你对 $T_0$ 至 $T_m$,分别求出这 $m+1$ 棵树的最大独立集大小。

有根树 $T$ 的独立集 $S$ 的定义是 :$S$ 是 $T$ 上节点的子集,同时对于任意 $S$ 中的点 $i$,$i$ 的父亲 $f_i$ 不在 $S$ 中。

输入格式

第一行输入两个整数 $n,m(1 \leq n,m \leq 10^5)$,表示无根树上的节点个数与可怜进行的操作次数。

接下来 $n-1$ 行每行两个整数 $u,v(1 \leq u,v \leq n)$ 表示书上的一条边。

接下来 $m$ 行每行一个整数 $k_i(1 \leq k_i \leq n)$ 表示在第 $i$ 次操作中,可怜选择的节点。

输出

输出 $m+1$ 行,每行一个整数,表示对应的树的最大独立集的大小。答案可能很大, 对 $998244353$ 取模后输出。

样例

样例输入 1

1 5 1 1 1 1 1

样例输出 1

1 1 2 2 3 3

样例输入 2

5 5 1 2 2 3 2 4 1 5 5 4 3 2 1

样例输出 2

3 18 93 465 2328 11643

提示