2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门
题意:给你一棵带点权的树,多次询问路径的最大异或和。
思路:
线性基上树??
倍增维护一下就完了。
时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n)
代码:
#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int rlen=1<<18|1;
inline char gc(){
static char buf[rlen],*ib,*ob;
(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
return ib==ob?-1:*ib++;
}
inline ll read(){
ll ans=0;
char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
return ans;
}
const int N=20005;
int n,m,fa[N][15],dep[N];
ll a[N];
struct xxj{
ll a[61];
xxj(){memset(a,0,sizeof(a));}
inline void insert(ll x){
for(ri i=60;~i;--i)if((x>>i)&1){
if(a[i]){x^=a[i];continue;}
a[i]=x;
break;
}
}
friend inline xxj operator+(const xxj&a,const xxj&b){
xxj ret=a;
for(ri i=60;~i;--i)if(b.a[i])ret.insert(b.a[i]);
return ret;
}
inline ll query(){
ll ret=0;
for(ri i=60;~i;--i)ret=max(ret,ret^a[i]);
return ret;
}
}st[N][15];
vector<int>e[N];
void dfs(int p){
st[p][0].insert(a[fa[p][0]]);
for(ri i=0,v;i<e[p].size();++i){
if((v=e[p][i])==fa[p][0])continue;
fa[v][0]=p,dep[v]=dep[p]+1,dfs(v);
}
}
inline ll solve(int x,int y){
xxj ret;
ret.insert(a[x]),ret.insert(a[y]);
if(dep[x]<dep[y])swap(x,y);
for(ri i=14,tmp=dep[x]-dep[y];~i;--i)if((tmp>>i)&1)ret=ret+st[x][i],x=fa[x][i];
if(x==y)return ret.query();
for(ri i=14;~i;--i)if(fa[x][i]^fa[y][i])ret=ret+(st[x][i]+st[y][i]),x=fa[x][i],y=fa[y][i];
return (ret+st[x][0]).query();
}
int main(){
n=read(),m=read();
for(ri i=1;i<=n;++i)a[i]=read();
for(ri i=1,u,v;i<n;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
dfs(1);
for(ri j=1;j<15;++j)for(ri i=1;i<=n;++i)fa[i][j]=fa[fa[i][j-1]][j-1],st[i][j]=st[i][j-1]+st[fa[i][j-1]][j-1];
for(ri x,y;m;--m)x=read(),y=read(),cout<<solve(x,y)<<'\n';
return 0;
}
2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)的更多相关文章
- [BZOJ4568][Scoi2016]幸运数字 倍增+线性基
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1791 Solved: 685[Submit][Statu ...
- 【BZOJ4568】[Scoi2016]幸运数字 倍增+线性基
[BZOJ4568][Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念 ...
- bzoj4568: [Scoi2016]幸运数字(LCA+线性基)
4568: [Scoi2016]幸运数字 题目:传送门 题解: 好题!!! 之前就看过,当时说是要用线性基...就没学 填坑填坑: %%%线性基 && 神犇 主要还是对于线性基的运用和 ...
- BZOJ 4568: [Scoi2016]幸运数字(倍增+线性基)
传送门 解题思路 异或最大值肯定线性基了,树上两点那么就倍增搞一搞,就维护每个点到各级祖先的线性基,时间复杂度\(O(nlog^3n)\),并不知道咋过去的. 代码 #include<iostr ...
- 【BZOJ4568】幸运数字(线性基,树链剖分,ST表)
[BZOJ4568]幸运数字(线性基,树链剖分,ST表) 题面 BZOJ Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市 ...
- [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 2131 Solved: 865[Submit][Statu ...
- [SCOI2016]幸运数字(线性基,倍增)
[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作 ...
- 【BZOJ 4568】 4568: [Scoi2016]幸运数字 (线性基+树链剖分+线段树)
4568: [Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形 ...
- 【bzoj4568】【Scoi2016】幸运数字 (线性基+树上倍增)
Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一 ...
随机推荐
- Jquery通过AJAX从后台获取数据显示在表格上(复选)
代码: function GetMultiLineSelectTable(tableId, selectIds) { var table = $(tableId); var url = table.d ...
- 前端面试之Javascript
1,JS基本的数据类型和引用类型: (1)基本数据类型:number,string,null,undefined,symbol--栈: (2)引用数据类型:object,array,function- ...
- xLearn
https://blog.csdn.net/songbinxu/article/details/79662665
- eos dapp开发
https://blog.csdn.net/u010665359/article/details/82906497
- 知识点---animate()动画滞后执行的解决方案
jQuery动画: animate 容易出现连续触发.滞后反复执行的现象: 针对 jQuery 中 slideUp.slideDown.animate 等动画运用时出现的滞后反复执行等问题的解决方法有 ...
- 虚拟机JVM
虚拟机组成:类加载器,运行时数据区,执行引擎 运行时数据区:堆,栈,方法区,程序计数器,本地方法栈 堆:对象实例 栈:入栈出栈,线程的执行 栈帧:一个方法一个 栈的结构:放 局部变量表,操作数栈,动态 ...
- python中类中的@property
@property考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name self ...
- Windows内核开发之串口过滤
学习了几个月的内核编程,现在对Windows驱动开发又了更加深入的认识,特别是对IRP的分层处理逻辑有了深入认识. 总结起来就几句话: 当irp下来的时候,你要根据实际情况,进行处理 1> 无处 ...
- 后台商品搜索功能开发SQL
在做后台的商品搜索功能开发时遇到了一些问题记录下来 版本一 <select id="SelectByNameAndParentId resultMap="Base_resul ...
- tiny4412 --Uboot移植(5) DDR3内存
开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...