U88001 捉迷藏

题目描述

除了算法竞赛,$Cicada$ 和 $Dove$ 最喜欢的活动还是捉迷藏。 $Cicada$ 和 $Dove$ 所在的社区有 $n$ 个躲藏点,第 $i$ 个躲藏点的编号为 $a_i$,总共有 $n-1$条路径连接着这些躲藏点,形成一个树的结构。每个躲藏点有一盏灯,且最开始每盏灯的开关状态是已知的。 在一次游戏中,$Dove$ 从躲藏点 $u$ 出发寻找 $Cicada$。$Dove $怕黑,到达一个躲藏点时如果这个位置的灯是关闭的,那么 $Dove $会把这个位置的灯打开。 任意一个位置 $Dove$ 都可以访问多次,但是每一个位置最多只会开一次灯。 $Dove$ 讨厌奇数,所以一次游戏中 $Dove$ 只会打 开**偶数**栈灯。 特别的,如果 $Dove$ 从一个位置出发后无法打开偶数栈灯,那么我们认为其访问的躲藏点数为 0。 为了取得游戏的胜利,$Cicada$ 需要评估 $Dove$ 从每躲藏点出发最多能访问到的躲藏点的 数量。因为 $Cicada$ 还要学文化课,所以这个任务就交给你了。

输入格式

一行一个整数 $n$,表示躲藏点的数量。 接下来一行 $n$ 个整数,第 $i$ 个数 $a_i \in \{0, 1\}$ 表示第$i$个躲藏点灯的状态, 如果 $a_i=0$,表示灯是关闭的。 如果 $a_i=1$,则表示灯是开启的。 接下来 $n-1$ 行,每行两个整数 $u,v$,表示 $u,v$ 之间存在一条路径。

输出格式

输出 $n$ 行,第 $i$ 行表示 $Dove$ 从 $i$ 出发能访问到的最多的躲藏点的数量。

说明/提示

对于所有测试点,保证 $n \le 10^6$。 ![D1T2Hit.png](https://img.langlangago.xyz/2019/09/18/5d8197bb6d6cd.png)