小红的双生树hard
题号:NC287382
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}这是问题的困难版本,与简单版本唯一不同的地方在于对 q 的范围限制。
\hspace{15pt}小红定义一棵树是“双生树”,当且仅当树的每个节点的相邻节点中,恰好有一个节点和该节点颜色相同。

\hspace{15pt}现在小红拿到了一棵树,每个节点的颜色都染成了红色或蓝色。小红每次操作可以修改任意一个节点的颜色(红色修改为蓝色、蓝色修改为红色)。这棵树的权值定义为:将其修改为“双生树”的最小操作次数。
\hspace{15pt}现在小红有若干次询问,她希望你回答:若将节点 x 到节点 y 的简单路径上所有节点的颜色都染成红色,该树的权值是多少?请注意,每次询问后并不会真正修改。

输入描述:

\hspace{15pt}第一行输入两个正整数 n,q \left(2 \leqq n \leqq 10^5;\ 1 \leqq q \leqq 10^5\right) 代表树的节点数量和询问次数。 
\hspace{15pt}第二行输入一个长度为 n ,仅由字母 \texttt{`R'}\texttt{`B'} 组成的字符串 s 代表树上节点的颜色。其中,第 i 个字符 s_i=\texttt{`R'} 代表第 i 个节点为红色,s_i=\texttt{`B'} 代表蓝色。
\hspace{15pt}此后 n-1 行,第 i 行输入两个正整数 u_i,v_i \left(1 \leqq u_i,v_i \leqq n\right) 表示树上第 i 条边连接节点 u_iv_i
\hspace{15pt}此后 q 行,每行输入两个正整数 x,y \left(1 \leqq x,y \leqq n\right) 代表一次询问。

输出描述:

\hspace{15pt}对于每一次询问,新起一行。如果无论如何都无法将该树变成“双生树”,输出 -1;否则,输出一个整数,代表路径染色后树的权值。
示例1

输入

复制
4 2
RBBB
1 2
2 3
3 4
1 2
1 4

输出

复制
0
2

说明

\hspace{15pt}在这个样例中,初始树的样式如下图所示:
image
示例2

输入

复制
4 1
RRBB
1 2
1 3
1 4
1 4

输出

复制
-1