在树的路径上选取一些点 使得这些点权xor后的结果最大
思路:

时限60s 59696ms卡过去了哈哈哈

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=20005;
ll Temp[128],ans;
int n,q,first[N],next[N],v[N],tot,xx,yy,deep[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
struct Node{int anc,num;ll eli[62];}fa[N][16],G[N],jy;
int Gauss(Node a,Node b){int num=a.num+b.num,flag=1;for(int i=1;i<=a.num;i++)Temp[i]=a.eli[i];for(int i=1;i<=b.num;i++)Temp[i+a.num]=b.eli[i];for(int i=60,j;~i;i--){for(j=flag;j<=num;j++)if(Temp[j]&(1ll<<i))break;if(j==num+1)continue;swap(Temp[flag],Temp[j]);for(int k=1;k<=num;k++)if(k!=flag&&Temp[k]&(1ll<<i))Temp[k]^=Temp[flag];flag++;}return flag-1;
}
void dfs(int x){for(int i=1;i<=15;i++){fa[x][i].anc=fa[fa[x][i-1].anc][i-1].anc;fa[x][i].num=Gauss(fa[x][i-1],fa[fa[x][i-1].anc][i-1]);for(int j=1;j<=fa[x][i].num;j++)fa[x][i].eli[j]=Temp[j];}for(int i=first[x];~i;i=next[i]){if(v[i]!=fa[x][0].anc){fa[v[i]][0].anc=x,deep[v[i]]=deep[x]+1;fa[v[i]][0].num=Gauss(G[v[i]],G[x]);for(int j=1;j<=fa[v[i]][0].num;j++)fa[v[i]][0].eli[j]=Temp[j];dfs(v[i]);}}
}
void LCA(int x,int y){if(deep[x]<deep[y])swap(x,y);for(int i=15;~i;i--)if(deep[x]-(1<<i)>=deep[y]){jy.num=Gauss(jy,fa[x][i]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];x=fa[x][i].anc;}if(x==y){jy.num=Gauss(jy,G[x]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];return;}for(int i=15;~i;i--){if(fa[x][i].anc!=fa[y][i].anc){jy.num=Gauss(jy,fa[x][i]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];jy.num=Gauss(jy,fa[y][i]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];x=fa[x][i].anc,y=fa[y][i].anc;}}jy.num=Gauss(jy,fa[x][0]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];jy.num=Gauss(jy,fa[y][0]);for(int j=1;j<=jy.num;j++)jy.eli[j]=Temp[j];
}
int main(){memset(first,-1,sizeof(first));scanf("%d%d",&n,&q);for(int i=1;i<=n;i++)scanf("%lld",&G[i].eli[1]),G[i].num=1;for(int i=1;i<n;i++)scanf("%d%d",&xx,&yy),add(min(xx,yy),max(xx,yy));deep[1]=1,dfs(1);for(int i=1;i<=q;i++){scanf("%d%d",&xx,&yy);jy.num=ans=0,LCA(xx,yy);for(int i=1;i<=jy.num;i++)ans^=jy.eli[i];printf("%lld\n",ans);}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532066.html

BZOJ 4568 倍增维护线性基相关推荐

  1. 【BZOJ4568】幸运数字,树链剖分/倍增+维护线性基

    Time:2016.09.06 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 对于两个线性基数组a,b,直接向b中加a的元素进行线性基合并就可以了 复杂度O(P2)O(P^2)其中 ...

  2. 【bzoj4184】shallot 线段树+高斯消元动态维护线性基

    题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...

  3. 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]

    题目链接 题目大意:就是给你一棵树,每个树上的节点都有一个权值,现在给你一个询问u和v问你这个路径上面挑任意几个数进行xor运算,问你xor最大值是多少 解题思路:对于每个点我们可以维护它向根节点上面 ...

  4. P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)

    P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...

  5. UVALive - 8512——线段树维护线性基

    [题目描述] UVALive - 8512XOR [题目分析] 这种区间+线性基的问题我们可以考虑用线段树维护,线性基的合并的话就直接暴力合并 找到所在区间的线性基后再查找最大的数,我看网上的博客要说 ...

  6. BZOJ 2460: [BeiJing2011]元素 线性基

    2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法 ...

  7. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

  8. bzoj 3811: 玛里苟斯【线性基+期望dp】

    这个输出可是有点恶心啊--WA*inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5 ...

  9. [BZOJ]2460: [BeiJing2011]元素 线性基+贪心

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越 ...

最新文章

  1. 浅谈android Service和BroadCastReceiver
  2. JS的instanceof
  3. cvMorphology形态学原理解析及源码分析
  4. 微信新的用户信息接口wx.getUserProfile,返回信息解密失败
  5. IntelliJ IDEA 默认快捷键大全
  6. oracle form执行后左上角没出现oracle标记,oracle form学习笔记
  7. windows2003安装网络打印机的问题(原创,转载请注明)
  8. Windows Server 2012启用Windows功能NetFx3时出错解决方法
  9. 为何越来越多的人想离婚?越来越多的人不想结婚?
  10. Arduino连接LCD1602显示屏
  11. CRM管理系统带给企业五大实际效益
  12. 学习笔记:Towards Counterfactual Image Manipulation via CLIP 基于CLIP的反事实图像处理研究
  13. android系统recovery模式,Android系统Recovery模式中文详细说明
  14. JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)
  15. Hudi(1.0、2.0)简介
  16. Service概述 生命周期 IBinder
  17. 引流脚本怎么样?自动脚本引流的优势是什么?
  18. 复合充血模式和领域服务调度-阿里互联网法院项目
  19. 【运筹学】对偶理论与的对偶问题最优解算法
  20. shell实现ftp命令

热门文章

  1. 噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...
  2. python调用linux命令输出结果,Python-运行shell命令并捕获输出
  3. 对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...
  4. vue 动态变量名_【告别复制粘贴】动态模板生成小技巧
  5. C++ 11 深度学习(十)多线程
  6. python源码笔记_python源码学习笔记(二)
  7. word一键生成ppt 分页_如何一键把Word转换为PPT?
  8. C++应用过程中使用知识点
  9. 视频光端机园区出入口监控项目应用方案详解
  10. 以太网应用于控制时存在的问题