题面中要求求两点间所有边权的异或和,但为何正确答案需输出点到根节点的亦或和,而不是选中边与搜到的边的亦或和?
int query(int a){
int pos=0,sum=0;
for(int i=31;i>=0;i--){
int c=(a>>i)&1;
if(tr[pos][!c]){
sum+=(1<<i);
pos=tr[pos][!c];
}
else pos=tr[pos][c];
}
return a^sum;
}
int ans=-1;
for(int i=1;i<=n;i++){
ans=max(ans,query(dis[i]));
}
cout<<ans;
int query(int a){
int pos=0,sum=0;
for(int i=31;i>=0;i--){
int c=(a>>i)&1;
if(tr[pos][!c]){
sum+=(1<<i);
pos=tr[pos][!c];
}
else pos=tr[pos][c];
}
return sum;
}
int ans=-1;
for(int i=1;i<=n;i++){
ans=max(ans,query(dis[i]));
}
cout<<ans;