#P17336. 【MX-X30-T2】青蛙跳荷叶

【MX-X30-T2】青蛙跳荷叶

题目描述

池塘上有 nn 片荷叶,从 11 编号到 nn。现在有一棵大小为 nn 的有根树 TT 描述了这些荷叶的关系。TT 的根是 11。

每片荷叶上都有一个符号 U\texttt{U} 或者 D\texttt{D}。这个符号表示如果青蛙在第 ii 片荷叶上,则:

  • 若符号是 U\texttt{U},则可以跳到 TT 上 ii 的祖先(不包含自身)。
  • 若符号是 D\texttt{D},则可以跳到 TT 上 ii 的子孙(不包含自身)。

定义这棵树对青蛙是友好的,当且仅当青蛙可以从任意一个荷叶 ss 开始,跳过所有荷叶至少一次,回到 ss。

由于一些原因,一些荷叶上的符号模糊了,记为 ?\texttt{?} 符号。定义 f(T)f(T) 为把每个 ?\texttt{?} 符号替换成 U\texttt{U} 或 D\texttt{D} 后,这棵树对青蛙是友好的方案数。

由于一些原因,这些荷叶上的三种符号可能会发生局部变化,有 qq 次修改,每次修改让第 xx 片荷叶的符号变成 yy,你需要在每次修改后和初始时求出 f(T)f(T) 对 998244353998244353 取模的结果。

输入格式

第一行包含两个整数 n,qn,q。

第二行包含一个长度为 nn 的字符串,第 ii 个字符表示第 ii 片荷叶上的符号 aia_i。

接下来 n−1n-1 行,第 ii 行两个整数 ui,viu_i,v_i,表示树 TT 上存在一条 uiu_i 到 viv_i 的边。

接下来 qq 行,第 ii 行一个整数和一个字符 xi,yix_i,y_i,表示让第 xix_i 片荷叶的符号变成 yiy_i。

输出格式

包含 q+1q+1 行,第 ii 行包含一个整数,表示前 i−1i-1 次修改按顺序执行完后,f(T)f(T) 对 998244353998244353 取模的结果。

5 3
?????
1 2
1 3
2 4
3 5
1 U
1 D
4 U
4
0
4
4

提示

子任务编号 n,q≤n,q\le 特殊性质 分数
11 1010 无 1313
22 10310^3 A 2323
33 B
44 3×1053\times 10^5 A 1515
55 B
66 无 1111

特殊性质 A:保证 ai,yi∈{U,D}a_i,y_i\in \{\texttt{U},\texttt{D}\}。

特殊性质 B:保证 q=0q=0,且 ai=?a_i=\texttt{?}。

对于所有数据,保证 1≤n≤3×1051\le n\le 3\times 10^5,0≤q≤3×1050\le q\le 3\times 10^5。

保证 1≤ui,vi≤n1\le u_i,v_i\le n,给定的边构成一棵以 11 为根的树。

保证 ai,yi∈{U,D,?}a_i,y_i\in \{\texttt{U},\texttt{D},\texttt{?}\}。保证 1≤xi≤n1\le x_i\le n。