CF1975E Chain Queries

题目描述

给定一棵有 $n$ 个顶点的树,顶点编号为 $1$ 到 $n$。初始时,每个顶点被染成白色或黑色。 你需要进行 $q$ 次操作: - “u” —— 翻转顶点 $u$ 的颜色(如果原来是白色,则变为黑色;如果原来是黑色,则变为白色)。 每次操作后,你需要回答所有黑色顶点是否构成一条链。也就是说,是否存在两个黑色顶点,使得它们之间的简单路径经过且仅经过所有黑色顶点。特别地,如果只有一个黑色顶点,也视为构成一条链。如果没有黑色顶点,则不构成链。

输入格式

每个测试点包含多组测试用例。第一行包含一个整数 $t$($1\leq t\leq 10^4$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$ 和 $q$($1\leq n,q\leq 2\cdot 10^5$)。 第二行包含 $n$ 个整数 $c_1,c_2,\ldots,c_n$($c_i\in\{\mathtt{0},\mathtt{1}\}$),表示每个顶点的初始颜色。$c_i$ 表示顶点 $i$ 的颜色,$\mathtt{0}$ 表示白色,$\mathtt{1}$ 表示黑色。 接下来 $n-1$ 行,每行包含两个整数 $x_i$ 和 $y_i$($1\leq x_i,y_i\leq n$),表示在顶点 $x_i$ 和 $y_i$ 之间有一条边。保证这些边构成一棵树。 接下来的 $q$ 行,每行包含一个整数 $u_i$($1\leq u_i\leq n$),表示需要翻转顶点 $u_i$ 的颜色。 保证所有测试用例中 $n$ 和 $q$ 的总和分别不超过 $2\cdot 10^5$。

输出格式

对于每次操作,如果黑色顶点构成一条链,输出 “Yes”;否则输出 “No”。 你可以用任意大小写组合输出 “Yes” 和 “No”(例如 "yEs"、"yes"、"Yes"、"YES" 都被认为是肯定回答)。

说明/提示

在第二个测试用例中,顶点的颜色变化如下: 初始树: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1975E/d67482a066522c11f266b4eca3d7a1ef0055849d.png) 第一次操作翻转顶点 $4$ 的颜色: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1975E/4a07e30139deb2cb81867b3706db8e9ec51e4318.png) 第二次操作翻转顶点 $3$ 的颜色: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1975E/fd56e11f35468c4b51183822460fd341cde05e88.png) 第三次操作翻转顶点 $2$ 的颜色: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1975E/f1f02d1c42e642ef8cfd2174f0e71d8955cb85ac.png) 第四次操作翻转顶点 $5$ 的颜色: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1975E/72ebf27a994a252cc8de91446a4beacafa646ddb.png) 由 ChatGPT 4.1 翻译