CF763A Timofey and a tree
题目描述
每年新年,Timofey 和他的朋友们都会砍下一棵有 $n$ 个顶点的树并带回家。之后,他们将树上的 $n$ 个顶点全部涂色,第 $i$ 个顶点被涂上颜色 $c_{i}$。
现在轮到 Timofey 过生日了,他的妈妈让他把树清理掉。Timofey 按如下方式移除这棵树:他拿起某个顶点,所有其他顶点都向下移动,使这棵树以选中的顶点为根。随后,Timofey 将这棵树带去垃圾桶。
Timofey 不喜欢多种颜色混在一起。如果某个子树中存在不同颜色的顶点,那么这个子树会让他感到烦恼。Timofey 想找到一个顶点,把它拿在手里,这样子树中就不会有令他烦恼的情况。他不把整棵树本身看作子树,因为他无法看到根节点的颜色。
某个顶点的子树,是包含该顶点及其所有后代的子图。
你的任务是判断是否存在某个顶点,Timofey 把它拿在手里后,所有子树都不会令他烦恼。
输入格式
第一行包含一个整数 $n$($2 \le n \le 10^{5}$),表示树的顶点数。
接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1 \le u,v \le n$,$u \ne v$),表示顶点 $u$ 和 $v$ 之间有一条边。保证输入构成一棵树。
最后一行包含 $n$ 个整数 $c_1, c_2, ..., c_n$($1 \le c_i \le 10^{5}$),表示每个顶点的颜色。
输出格式
如果不存在满足条件的顶点,输出一行 "NO"。
否则,第一行输出 "YES"。第二行输出 Timofey 应该拿在手里的顶点编号。如果有多个答案,输出任意一个均可。
说明/提示
由 ChatGPT 5 翻译