其实......这就是个SB题,本来看到这个题,和树上路径有关
于是——我就欣喜地打了一个树剖上去,结果嘞,异或两遍等于没异或
所以这题和LCA屁关系都没有,所以这题就是个树上DFS!!!!
所以它为啥是绿的?不知道.....某谷地评分就是不能信
于是就A了呗
#include <iostream>
#include <cstdlib>
#include <cstdio>
const int N=1e5+5;
struct edge{
int to,next,data;
}e[(N<<1)];
int n,tot,head[N];
int Xor[N],m;
inline void build(int u,int v,int w){
e[++tot].next=head[u];e[tot].to=v;
head[u]=tot;e[tot].data=w;return ;
}
inline void dfs(int cur,int anc){
for(int i=head[cur];i;i=e[i].next){
register int k=e[i].to;
if(k==anc) continue;
Xor[k]=Xor[cur]^e[i].data;
dfs(k,cur);
}
return ;
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;++i){
register int u,v,w;
scanf("%d%d%d",&u,&v,&w);
build(u,v,w);build(v,u,w);
}
dfs(1,0);
scanf("%d",&m);
while(m--){
register int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",Xor[u]^Xor[v]);
}
return 0;
}