求出x到lca与y到lca的值异或
由异或性质得x到根的值与y到根的值异或
#include <cstdio>
#define MAXN 100010
using namespace std;
int cnt, n, m, now[MAXN], x, y, w;
int dep[MAXN];
bool p[MAXN];
struct Edge {
int from, to, nxt, cost;
}es[MAXN * 2];
int read() {
int f = 1, k = 0 ;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') {
f = -1;
}
c = getchar();
}
while(c >= '0' && c <= '9') {
k = k * 10 + c - '0';
c = getchar();
}
return f * k;
}
void addedge(int a, int b, int c) {
es[++cnt].from = a;
es[cnt].to = b;
es[cnt].nxt = now[a];
now[a] = cnt;
es[cnt].cost = c;
}
void dfs(int a) {
p[a] = 1;
for(int i = now[a]; i != 0; i = es[i].nxt) {
if(!p[es[i].to]) {
dep[es[i].to] = (es[i].cost ^ dep[a]);
dfs(es[i].to);
}
}
return;
}
int query(int a, int b) {
return dep[a] ^ dep[b];
}
int main() {
n = read();
for(int i = 1; i < n; i ++) {
x = read(), y = read(), w = read();
addedge(x, y, w);
addedge(y, x, w);
}
dfs(1);
m = read();
for(int i = 1; i <= m; i ++) {
x = read(), y = read();
printf("%d\n", query(x, y));
}
return 0;
}