题目简述:
题目分析:
由于异或的性质: a a a^ a = 0 a=0 a=0,所以可以计算询问的两个点到根节点的路上的异或和进行异或即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,u,v,val,m,d[100005];
bool vis[100005];
vector<pair<int,int> > e[100005];
void dfs(int x){
vis[x]=true;
for(int i=0;i<e[x].size();++i){
int to=e[x][i].first,c=e[x][i].second;
if(vis[to])continue;
d[to]=d[x]^c;
dfs(to);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;++i){
scanf("%d%d%d",&u,&v,&val);
e[u].push_back({v,val});
e[v].push_back({u,val});
}
dfs(1);
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&u,&v);
printf("%d\n",d[u]^d[v]);
}
return 0;
}
时隔72天,我又回来了!