CF1626E Black and White Tree

题目描述

给定一棵包含 $n$ 个顶点的树,其中一些顶点(至少有两个)是黑色的,其余顶点是白色的。 你可以在树上的任意一个顶点放置一个棋子,然后执行如下操作: - 假设当前棋子所在的顶点为 $x$,你选择一个黑色顶点 $y$,然后将棋子沿着从 $x$ 到 $y$ 的简单路径上的第一条边移动。 你不能在连续两次操作中选择同一个黑色顶点 $y$(即,每两次连续操作中,所选的黑色顶点必须不同)。 当棋子移动到某个黑色顶点时(如果一开始就放在黑色顶点,则不进行任何操作),或者操作次数超过 $100^{500}$ 时,操作结束。 对于每个顶点 $i$,你需要判断:如果最初将棋子放在顶点 $i$,是否存在一系列(可能为空)操作,使得棋子最终能移动到某个黑色顶点。

输入格式

第一行包含一个整数 $n$($3 \le n \le 3 \cdot 10^5$),表示树的顶点数。 第二行包含 $n$ 个整数 $c_1, c_2, \dots, c_n$($0 \le c_i \le 1$),其中 $c_i = 0$ 表示第 $i$ 个顶点是白色,$c_i = 1$ 表示第 $i$ 个顶点是黑色。至少有两个 $c_i$ 等于 $1$。 接下来 $n-1$ 行,每行包含两个整数 $u_i$ 和 $v_i$($1 \le u_i, v_i \le n$,$u_i \ne v_i$),表示一条树的边。

输出格式

输出 $n$ 个整数。第 $i$ 个整数为 $1$,表示如果将棋子放在顶点 $i$,存在一系列(可能为空)操作可以将棋子移动到某个黑色顶点;为 $0$,表示不存在这样的操作。

说明/提示

由 ChatGPT 4.1 翻译