传送门

不知道线性基是什么东西的可以看看蒟蒻的总结

第一眼:这不会是个倍增LCA暴力合并线性基吧……

打了一发……A了?

所以这真的是个暴力倍增LCA合并线性基么……

ps:据某大佬说其实可以离线之后用点分做,那样的话因为每次只要合并两个线性基,复杂度可以减一个$log$

 //minamoto
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
using namespace std;
inline ll read(){
#define num ch-'0'
char ch;bool flag=;ll res;
while((ch=getc())>''||ch<'')
(ch=='-')&&(flag=true);
for(res=num;(ch=getc())<=''&&ch>='';res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
inline void print(ll x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=;
int n,q,tot,head[N],Next[N<<],ver[N<<],dep[N];
ll fa[N][],b[N][][],sum,ans[],val[N];
inline void add(int u,int v){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot;
}
inline void get(ll *b,ll x){
for(int i=;i>=;--i)
if(x>>i&){
if(!b[i]) return (void)(b[i]=x);
x^=b[i];
}
}
inline void merge(ll *b,ll *x){
for(int i=;i>=;--i)
if(x[i]) get(b,x[i]);
}
inline void init(int i){
for(int j=;j<;++j){
fa[i][j]=fa[fa[i][j-]][j-];
memcpy(b[i][j],b[i][j-],sizeof(b[i][j-]));
merge(b[i][j],b[fa[i][j-]][j-]);
}
}
void dfs(int u,int f){
fa[u][]=f,dep[u]=dep[f]+,init(u);
for(int i=head[u];i;i=Next[i])
if(ver[i]!=f) dfs(ver[i],u);
}
void LCA(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=;i>=;--i)
if(dep[fa[u][i]]>=dep[v])
merge(ans,b[u][i]),u=fa[u][i];
if(u==v) return (void)(merge(ans,b[u][]));
for(int i=;i>=;--i)
if(fa[u][i]!=fa[v][i]){
merge(ans,b[u][i]),merge(ans,b[v][i]);
u=fa[u][i],v=fa[v][i];
}
merge(ans,b[u][]),merge(ans,b[v][]),merge(ans,b[fa[u][]][]);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),q=read();
for(int i=;i<=n;++i)
get(b[i][],val[i]=read());
for(int i=,u,v;i<n;++i)
u=read(),v=read(),add(u,v),add(v,u);
dfs(,);
while(q--){
memset(ans,,sizeof(ans));
int u=read(),v=read();
LCA(u,v);
sum=;
for(int i=;i>=;--i)
cmax(sum,sum^ans[i]);
print(sum);
}
Ot();
return ;
}

洛谷P3292 [SCOI2016]幸运数字(倍增+线性基)的更多相关文章

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

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

  2. [洛谷P3292] [SCOI2016]幸运数字

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

  3. [BZOJ4568][Scoi2016]幸运数字 倍增+线性基

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1791  Solved: 685[Submit][Statu ...

  4. 【BZOJ4568】[Scoi2016]幸运数字 倍增+线性基

    [BZOJ4568][Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念 ...

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

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

  6. BZOJ 4568: [Scoi2016]幸运数字(倍增+线性基)

    传送门 解题思路 异或最大值肯定线性基了,树上两点那么就倍增搞一搞,就维护每个点到各级祖先的线性基,时间复杂度\(O(nlog^3n)\),并不知道咋过去的. 代码 #include<iostr ...

  7. [SCOI2016]幸运数字(线性基,倍增)

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

  8. 【BZOJ 4568】 4568: [Scoi2016]幸运数字 (线性基+树链剖分+线段树)

    4568: [Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形 ...

  9. bzoj4568: [Scoi2016]幸运数字(LCA+线性基)

    4568: [Scoi2016]幸运数字 题目:传送门 题解: 好题!!! 之前就看过,当时说是要用线性基...就没学 填坑填坑: %%%线性基 && 神犇 主要还是对于线性基的运用和 ...

随机推荐

  1. Ubuntu增加Swap分区大小

    参考:http://blog.csdn.net/mznewfacer/article/details/7334592 以下摘自上述地址内容,并做了点小修改: 1.首先用命令free查看系统内 Swap ...

  2. 解决 eclipse出现 Address already in use: bind

    今天开发遇到下面问题,贴出部分异常信息,如下: [WARNING] failed SelectChannelConnector@ java.net.BindException: Address alr ...

  3. 千锋很火的SpringBoot实战开发教程视频

    springboot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  4. Java Web 项目打包脚本

    可用于 (但不限于) Eclipse 项目. 一次性生成:1. Java doc .zip 包:2. Java 源代码 .zip 包:3. Java 二进制文件 .jar 包:4. Java 源代码加 ...

  5. 动态注册BroadcastReceiver

    1. [代码][Java]代码      package com.zjt.innerreceiver;   import android.app.Service; import android.con ...

  6. socket即时聊天

    服务端 package com.luhan.text; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Gri ...

  7. WebApi发送HTML表单数据:文件上传与多部分MIME

    5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...

  8. centos 安装配置kettle

    安装JDK1.8: step1 下载JDK1.8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  9. Python 黑帽子第二章运行截图

  10. BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增+最短路

    BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不 ...