给定一棵 n 个节点的树,第 i号节点的权值为ai 。 现在给出 q次询问:回答树上任意两点之间路径上的权值,其中出现次数恰好为素数的权值,这些权值的异或和为多少。 输入格式 第一行有一个整数 n,表示节点个数。 接下来一行,有 n个整数ai 。 接下来n-1 行,每行有两个整数ui , vi,表示树上的一条边。 接下来一行有一个整数q ,表示询问次数。 接下来 q行,每行有两个整数xi ,yi 。 输出格式 对于每次询问输出一行,一个整数,表示满足条件的数值的异或和。
时间: 2024-04-01 15:34:13 浏览: 122
输入一个整数,判断2~n之间的素数并输出
4星 · 用户满意度95%
这是一个比较复杂的问题,需要使用树状数组和线性筛法来进行处理。具体步骤如下:
1. 读入输入数据,建立树的数据结构。
2. 对于每个节点,计算出其到根节点的路径上的所有权值的异或和,并将其保存在一个数组中。
3. 对于每个询问,使用树状数组快速计算出路径上的权值的出现次数,并使用线性筛法判断这些权值的和是否为素数。如果是素数,则累加到答案中。
4. 输出所有询问的答案。
下面是完整的代码实现:
阅读全文