首页 > 其他 > 详细

【洛谷2420】让我们异或吧

时间:2020-02-11 11:33:38      阅读:73      评论:0      收藏:0      [点我收藏+]

原题:

技术分享图片

 

 n<=1e5

 

这题简单,求出树上异或前缀和,每次询问时找出lca就行了技术分享图片

but,实际上根本不用求lca想过么技术分享图片

直接把询问的两个点的树上异或前缀和异或起来就vans了,根到lca上的边会异或两次,自动抵消

异或的性质还值得引起注意的呀

 

代码:

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 struct edg{int y,nxt,z;}e[210000];  int lk[110000],ltp=0;
 5 void ist(int x,int y,int z){
 6     e[++ltp]=(edg){y,lk[x],z};  lk[x]=ltp;
 7     e[++ltp]=(edg){x,lk[y],z};  lk[y]=ltp;
 8 }
 9 int n,m;
10 int f[110000];
11 void dfs(int x,int y){
12     for(int i=lk[x];i;i=e[i].nxt)if(e[i].y!=y){
13         f[e[i].y]=f[x]^e[i].z;
14         dfs(e[i].y,x);
15     }
16 }
17 int main(){
18     cin>>n;
19     int l,r,v;
20     for(int i=1;i<n;++i){
21         scanf("%d%d%d",&l,&r,&v);
22         ist(l,r,v);
23     }
24     dfs(1,0);
25     cin>>m;
26     while(m --> 0){
27         scanf("%d%d",&l,&r);
28         printf("%d\n",f[l]^f[r]);
29     }
30     return 0;
31 }
View Code

 

【洛谷2420】让我们异或吧

原文:https://www.cnblogs.com/cdcq/p/12294026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!