此题主要考查树的构建与异或运算的基本性质,将树构建完毕后,可以去求出从根节点到每一个节点中所有边权的异或,假设根节点是t,当前要查询的点为u,那么对于点x,它到点u的边权异或等于它到t点的所有边权异或与u点到t的所有边权异或的异或,然后根据异或运算的性质,点u到t点的边权异或与k值的异或即为任意点x到根节点的异或,此时,两点之间的边权异或值即为k
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
小红有一棵由n个节点、n−1条无向边构成的树,每条边的权值为wi。
定义树上两个点(u,v)的权值为,从u到v的简单路径上,全部边权的异或和,特别的,当u和v为同一个点时,权值为0。
小红会提出q次询间,每次询问要求计算有多少个点到节点u的权值恰好为k。
树是指这样的一张图,其上的任意两个点都连通,且不存在环。
简单路径是指两个节点之间的一条路径,其不包含任何重复的节点。
也就是说,在简单路径上每个节点只能出现一次。
第一行输入两个整数 n,q(1≤n,q≤105),分别表示节点总数和询问次数。
此后 n−1行,第i行输入三个整数ui,vi和wi(1≤u_i,v_i≤n;u_i≠v_i;0≤w<2^60)表示树
上第i条边连接节点ui和vi目边权为wi。保证树联通,没有重边。
此后q行,每行输入两个整数u,k(1≤u≤n,0≤k<260)代表被询问的节点和限定。
对于每一个询问,在一行上输出一个整数,代表到节点u的权值恰好为k的节点数量。
输入
3 2
1 2 2
1 3 3
1 0
2 2
输出
1
1