#ZF1050. 超超的实习难题
超超的实习难题
题目描述
超超学长已经实习了两个多月啦,这两个月里他感受到自己真的好菜啊,啥也不会还学不进去,每天都在解决各种有趣的问题,但是他太没用了总是无法自己独立解决出来。
今天交给他的任务是这样的: 给定一颗包含 个点与 条边的树( 个点 条边构成的连通图即为树,连通图意味着整张图只有一个连通块,连通块的定义是块内的每个点都能通过走过一些边到达任意的其他点)。每个点都有一个整数值作为该点的权值。
超超学长的任务是判断能否通过删除这棵树上最少 条边,最大 条边,使得这个连通图变成许多个连通块,并且满足每个连通块里的所有点的权值或运算在一起的结果相同。
超超学长想了好几天也想不出来,在工位上痛苦万分。他又不好意思拿这么简单的问题去问师兄,聪明机智的学弟学妹们能帮帮他么?
输入描述
第一行为两个整数 和 ,代表这棵树有 个点,我们最多删掉 条边。
第二行为 个整数 ,代表第 个点的权值是多少。其中 。 接下来 行每行有两个用空格分开的整数 和 ,代表 点和 点之间存在一条边,其中 。
输出描述
如果存在可行的方案,输出 YES
,否则输出 NO
。
样例
3 1
6 5 7
1 2
2 3
YES
2 1
1 2
1 2
NO
提示
对于第一个样例,删去 2-3这条边,划分成 [1,2] 和 [3] 这两块,或起来的结果都是 7。
对于第二个样例,显然只有一条边可删,删掉后两个块的或结果是 1 和 2 不相等,所以输出 NO。