扫地机器人
题号:NC307639
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在一个含有 n 个点 n 条边的无重边无自环的连通无向图中,有一个扫地机器人在执行清扫作业。其中结点 i 的标记 t_i \in \{0,1\}:如果为 1,则说明该结点需要进行清扫,扫地机器人在到达这个结点时会顺便进行清扫工作。机器人想知道,如果选定任意结点出发,每条边只能经过一次的话,最多能清扫多少个待清扫结点?

输入描述:

输入的第一行包含一个正整数 n

第二行包含 n 个整数 t_1, t_2, \cdots, t_n,相邻整数之间使用一个空格分隔。

接下来 n 行,每行包含两个正整数 u_i, v_i,用一个空格分隔,表示结点 u_i 和结点 v_i 之间有一条边。

- 对于所有评测用例,1 \leq n \leq 500000t_i \in \{0,1\}1 \leq u_i, v_i \leq n

输出描述:

输出一行包含一个整数表示答案。
示例1

输入

复制
9
1 0 1 0 0 1 1 0 1
2 8
2 9
2 5
1 5
1 3
1 4
4 5
4 6
6 7

输出

复制
4

说明

其中一种可行路线:3 \rightarrow 1 \rightarrow 4 \rightarrow 6 \rightarrow 7,清扫结点 3, 1, 6, 7(共 4 个)。