#P841. 转语言

转语言

当前没有测试数据。

【题目描述】

AYYZ 机房中有 nn 台电脑,互相连接,形成了树状的结构。一些电脑是有 OIer 用的,而一些却没有,每台电脑至多被一个 OIer 使用。

有一天,konicyayyzlpy 来到了机房,并传来了先进的 C++ 语言。FoolMike 首先更换了语言,随后 FoolMike 又联合 konicyayyzlpy,号召大家全部使用 C++,否则不给模板。于是大家纷纷把语言换成了 C++(虽然还有人没换),机房的语言实现了大统一。

后来 konicy 退役了,FoolMike 忙于集训队作业无法自拔,机房中的 Pascal 语言又复辟了。而高一的同学们全都学习 C++,于是机房的语言再一次分裂成了 Pascal 和 C++ 两种。

后来冲突愈演愈烈,以至于如果两个使用不同语言的 OIer 的电脑在局域网中直接或间接联通,两个人就会互相攻击导致无法上课……

老师实在看不下去了,于是决定关闭一些电脑(当然有 OIer 使用的电脑是不能关闭的),使得 OIer 之间不会发生冲突。

老师知道你是个神犇,于是要你算出最少要关闭几台电脑才能满足条件。如果永远不能满足条件,请输出“-1”。

【输入格式】

第一行一个整数 nn,表示机房的电脑数量。

接下来 n1n-1 行,每行两个整数 ui,viu_{i},v_{i},表示编号为 uiu_{i}viv_{i} 的电脑直接联通。

接下来一行 nn 个整数,第 ii 个整数 aia_{i} 表示这台电脑的使用情况,ai=0a_{i}=0 表示第 ii 台电脑没有 OIer 使用,ai=1a_{i}=1 表示使用第 ii 台电脑的 OIer 使用 C++ 语言,ai=2a_{i}=2 表示使用第 ii 台电脑的 OIer 使用 Pascal 语言。

【输出格式】

一行一个整数,表示老师最少要关掉几台电脑,如果无论如何也不能满足条件,请输出“-1”。

【样例 1】

ex_war1.in
10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
2 0 1 1 0 2 2 0 0 1
ex_war1.ans
3

样例解释

关掉电脑 2,5,82,5,8 即可。

【样例 2】

ex_war2.in
6
1 5
5 4
4 3
4 2
4 6
1 1 0 1 2 2
ex_war2.ans
-1

样例解释

不论如何使用电脑 1155 的 OIer 都会互相攻击。

【样例 3】

参见样例数据下载。

【数据范围】

对于30%30\%的数据,n20n \leq 20

对于另外20%20\%的数据,ui=vi1u_{i}=v_{i}-1

对于另外20%20\%的数据,n5×104n \leq 5 \times 10^{4}

对于100%100\%的数据,$2 \leq n \leq 3 \times 10^{5}, 1 \le u_i, v_i \le n, u_i \neq v_i,a_i \in \{0, 1, 2\}$。