裸题练习模板

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=;
vector<ll>v[maxn][];
int d[maxn],n,Q,fa[maxn][],last[maxn],pre[maxn],other[maxn],t;
void add(int x,int y){++t;pre[t]=last[x];last[x]=t;other[t]=y;}
ll x,q[maxn];
vector<ll> uni(vector<ll> a,vector<ll> b){
vector<ll>ans;
int top=,lena=a.size(),lenb=b.size();
for(int i=;i<lena;++i)q[++top]=a[i];
for(int i=;i<lenb;++i)q[++top]=b[i];
int p=;
for(int j=;j>=;--j){
bool flag=;
for(int i=p+;i<=top;++i)
if((q[i]>>j)&){
swap(q[i],q[++p]);
flag=;break;
}
if(!flag)continue;
for(int i=;i<=top;++i)
if(i!=p){
if((q[i]>>j)&)q[i]^=q[p];
}
}
for(int i=;i<=p;++i)ans.push_back(q[i]);
return ans;
}
void dfs(int x){
for(int i=last[x];i;i=pre[i]){
int v=other[i];
if(v==fa[x][])continue;
d[v]=d[x]+;fa[v][]=x;
dfs(v);
}
}
int lca(int x,int y){
if(d[x]<d[y])swap(x,y);
for(int i=;i>=;--i)
if(d[fa[x][i]]>=d[y])x=fa[x][i];
if(x==y)return x;
for(int i=;i>=;--i)
if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][];
}
int jump(int x,int y){
for(int i=;i>=;--i){
if((<<i)&y)x=fa[x][i];
}
return x;
}
vector<ll> qs(int x,int y){
int k=log2(d[x]-d[y]+);
return uni(v[x][k],v[jump(x,d[x]-d[y]+-(<<k))][k]);
}
int main(){
cin>>n>>Q;
for(int i=;i<=n;++i){
scanf("%lld",&x);
v[i][].push_back(x);
}
int a,b,tmp;
for(int i=;i<n;++i){
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
}
dfs();
for(int j=;j<=;++j)
for(int i=;i<=n;++i){
fa[i][j]=fa[fa[i][j-]][j-];
v[i][j]=uni(v[i][j-],v[fa[i][j-]][j-]);
}
while(Q--){
scanf("%d%d",&a,&b);
tmp=lca(a,b);
vector<ll>ans=uni(qs(a,tmp),qs(b,tmp));
ll res=,siz=ans.size();
for(int i=;i<siz;++i)
if((res^ans[i])>res)res^=ans[i];
printf("%lld\n",res);
}
return ;
}

bzoj4568(合并线性基+倍增)的更多相关文章

  1. P3292 [SCOI2016]幸运数字 [线性基+倍增]

    线性基+倍增 // by Isaunoya #include <bits/stdc++.h> using namespace std; #define rep(i, x, y) for ( ...

  2. BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)

    题意 题目链接 Sol 线性基是可以合并的 倍增维护一下 然后就做完了?? 喵喵喵? // luogu-judger-enable-o2 #include<bits/stdc++.h> # ...

  3. BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]

    4568: [Scoi2016]幸运数字 题意:一颗带点权的树,求树上两点间异或值最大子集的异或值 显然要用线性基 可以用倍增的思想,维护每个点向上\(2^j\)个祖先这些点的线性基,求lca的时候合 ...

  4. 洛谷P3292 [SCOI2016]幸运数字 线性基+倍增

    P3292 [SCOI2016]幸运数字 传送门 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在 ...

  5. BZOJ 4568 [Scoi2016]幸运数字 ——线性基 倍增

    [题目分析] 考虑异或的最大值,维护线性基就可以了. 但是有多次的询问,树剖或者倍增都可以. 想了想树剖动辄数百行的代码. 算了,我还是写倍增吧. 注:被位运算和大于号的优先级坑了一次,QaQ [代码 ...

  6. CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)

    题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...

  7. 「洛谷3292」「BZOJ4568」「SCOI2016」幸运数字【倍增LCA+线性基+合并】

    [bzoj数据下载地址]不要谢我 先讲一下窝是怎么错的... \(MLE\)是因为数组开小了.. 看到异或和最大,那么就会想到用线性基. 如果不会线性基的可以参考一下我的学习笔记:「线性基」学习笔记a ...

  8. 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 238  Solved: 113[Submit][Status ...

  9. 【bzoj4568】[Scoi2016]幸运数字 树上倍增+高斯消元动态维护线性基

    题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一些旅行者希望游 ...

随机推荐

  1. 转:Jmeter分布式测试

    在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 一.Jmeter分 ...

  2. laravel -查询近7月走势图案例

    // 获取7月前的时间$time = date('Y-m',strtotime("-0 year -7 month -0 day" ));$where['created_at'] ...

  3. VS code 代码格式整理的配置

    { "workbench.iconTheme": "material-icon-theme", "vetur.validation.template& ...

  4. selemium 常用查找方法

    1.selemium.FindElement(By.LinkText("下一步")) 2.selemium.FindElement(By.Id("userNumber&q ...

  5. 在Centos7下搭建Socks5代理服务器

    在Centos7下搭建Socks5代理服务器 http://blog.51cto.com/quliren/2052776   采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器 ...

  6. 一张图说明TCP和UCP协议

    图片来自网络. 本来不想打字了,但是博客园有字数限制... 第一次 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号( ...

  7. virtualbox装个 ubuntu

    好久没弄 虚拟机了,感觉好不习惯 根据网上的步骤装了一ubuntu 启动报错 virtualbox intel_rapl: no valid rapl domains ...... 搜索到了一片中文博 ...

  8. Mac使用笔记大全

    1.mac中,怎么直接在当前文件夹打开终端? 步骤:(1)在键盘-快捷键-服务,勾选“新建位于文件夹位置的终端窗口”.(2)然后在需要打开终端的文件夹上,右键,“新建位于文件夹位置的终端窗口”即可. ...

  9. Numpy Ndarray对象

    Numpy 最重要的一个特点是 N 维数组对象 ndarrary ,它是一系列同类型数据的集合,以 0 下标为开始进行集合中的索引. ndarray 对象是用于存放同类型元素的多维数组. ndarra ...

  10. 当Vue中img的src是动态渲染时不显示问题

    最近遇见动态渲染img时,想起了当初刚开始写vue时,曾经遇见的一个小小坑. Vue中:img的src属性是动态渲染时不显示问题1.需求:展示用户头像,数据从后台获取,如果没有拿到则显示默认图片. 如 ...