BZOJ 4568 倍增维护线性基
在树的路径上选取一些点 使得这些点权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 倍增维护线性基相关推荐
- 【BZOJ4568】幸运数字,树链剖分/倍增+维护线性基
Time:2016.09.06 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 对于两个线性基数组a,b,直接向b中加a的元素进行线性基合并就可以了 复杂度O(P2)O(P^2)其中 ...
- 【bzoj4184】shallot 线段树+高斯消元动态维护线性基
题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...
- 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]
题目链接 题目大意:就是给你一棵树,每个树上的节点都有一个权值,现在给你一个询问u和v问你这个路径上面挑任意几个数进行xor运算,问你xor最大值是多少 解题思路:对于每个点我们可以维护它向根节点上面 ...
- P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)
P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...
- UVALive - 8512——线段树维护线性基
[题目描述] UVALive - 8512XOR [题目分析] 这种区间+线性基的问题我们可以考虑用线段树维护,线性基的合并的话就直接暴力合并 找到所在区间的线性基后再查找最大的数,我看网上的博客要说 ...
- BZOJ 2460: [BeiJing2011]元素 线性基
2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法 ...
- BZOJ 2115 [Wc2011] Xor ——线性基
[题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...
- bzoj 3811: 玛里苟斯【线性基+期望dp】
这个输出可是有点恶心啊--WA*inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5 ...
- [BZOJ]2460: [BeiJing2011]元素 线性基+贪心
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越 ...
最新文章
- 浅谈android Service和BroadCastReceiver
- JS的instanceof
- cvMorphology形态学原理解析及源码分析
- 微信新的用户信息接口wx.getUserProfile,返回信息解密失败
- IntelliJ IDEA 默认快捷键大全
- oracle form执行后左上角没出现oracle标记,oracle form学习笔记
- windows2003安装网络打印机的问题(原创,转载请注明)
- Windows Server 2012启用Windows功能NetFx3时出错解决方法
- 为何越来越多的人想离婚?越来越多的人不想结婚?
- Arduino连接LCD1602显示屏
- CRM管理系统带给企业五大实际效益
- 学习笔记:Towards Counterfactual Image Manipulation via CLIP 基于CLIP的反事实图像处理研究
- android系统recovery模式,Android系统Recovery模式中文详细说明
- JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)
- Hudi(1.0、2.0)简介
- Service概述 生命周期 IBinder
- 引流脚本怎么样?自动脚本引流的优势是什么?
- 复合充血模式和领域服务调度-阿里互联网法院项目
- 【运筹学】对偶理论与的对偶问题最优解算法
- shell实现ftp命令
热门文章
- 噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...
- python调用linux命令输出结果,Python-运行shell命令并捕获输出
- 对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...
- vue 动态变量名_【告别复制粘贴】动态模板生成小技巧
- C++ 11 深度学习(十)多线程
- python源码笔记_python源码学习笔记(二)
- word一键生成ppt 分页_如何一键把Word转换为PPT?
- C++应用过程中使用知识点
- 视频光端机园区出入口监控项目应用方案详解
- 以太网应用于控制时存在的问题