\(xor\) 最大值想到线性基,路径想到 \(lca\) 和树链剖分,由于没有修改用 \(lca\) 就可以。先用处理 \(fa\) 数组的方式处理倍增线性基(自然是得用线性基合并的),在求 \(lca\) 时把所有线性基全部合到一块儿就行。

考虑到本题实际上核心在于让路径上的线性基数量 \(\le O(\log n)\),所以也可以用点分治求解。三个时间复杂度应该都是 \(O(n\log^2n)\)。

本代码使用倍增。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20005,M=65;
int n,q,f[N][16],id[N];
vector<int>g[N];int dep[N];
struct lbas{
int ps[M];
lbas(){
memset(ps,0,sizeof(ps));
}inline void add(int x){
for(int i=60;~i;i--)
if((x>>i)&1){
if(ps[i]) x^=ps[i];
else{ps[i]=x;return;}
}
}inline void cov(lbas x){
for(int i=0;i<61;i++) ps[i]=x.ps[i];
}inline void merge(lbas x){
for(int i=0;i<61;i++)
if(x.ps[i]) add(x.ps[i]);
}inline int maxn(){
int re=0;
for(int i=60;~i;i--)
re=max(re,re^ps[i]);
return re;
}
}lb[N][16];
inline void dfs(int x,int fa){
lb[x][0].add(id[x]);
f[x][0]=fa,dep[x]=dep[fa]+1;
for(int i=0;i<15;i++){
f[x][i+1]=f[f[x][i]][i];
lb[x][i+1].cov(lb[f[x][i]][i]);
lb[x][i+1].merge(lb[x][i]);
}for(auto y:g[x])
if(y!=fa) dfs(y,x);
}inline int lca(int x,int y){
lbas sum;
if(dep[x]<dep[y]) swap(x,y);
for(int i=15;~i;i--)
if(dep[x]-dep[y]>=(1<<i))
sum.merge(lb[x][i]),x=f[x][i];
if(x==y) return sum.add(id[x]),sum.maxn();
for(int i=15;~i;i--){
if(f[x][i]==f[y][i]) continue;
sum.merge(lb[x][i]),x=f[x][i];
sum.merge(lb[y][i]),y=f[y][i];
}sum.add(id[f[x][0]]),sum.add(id[y]);
return sum.add(id[x]),sum.maxn();
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>id[i];
for(int i=1,x,y;i<n;i++)
cin>>x>>y,g[x].push_back(y),g[y].push_back(x);
dfs(1,0);
while(q--){
int x,y;cin>>x>>y;
cout<<lca(x,y)<<"\n";
}return 0;
}

[SCOI2016] 幸运数字 题解的更多相关文章

  1. BZOJ4568:[SCOI2016]幸运数字——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4568 https://www.luogu.org/problemnew/show/P3292 A ...

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

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

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

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

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

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

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

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

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

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

  7. [SCOI2016]幸运数字 树链剖分,线性基

    [SCOI2016]幸运数字 LG传送门 为了快乐,我们用树剖写这题. 强行树剖,线段树上每个结点维护一个线性基,每次查询暴力合并. 瞎分析一波复杂度:树剖两点之间\(\log n\)条重链,每条重链 ...

  8. bzoj 4568: [Scoi2016]幸运数字

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

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

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

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

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

随机推荐

  1. JPAAS整合宝蓝德

    现在软件国产化的需求成了刚需了,因此在实施的过程中,我们整合了宝蓝德,我将过程写一下. 1.宝蓝德提供的程序包. 包名 说明 bes-actuator-spring-boot-2.x-starter- ...

  2. ZCMU-1153

    思路 一个感觉是规律问题的数学问题 因为输入的是n所以要的出有关n的关系或者关系 有关排序,所以可以从位次入手,设双胞胎前一个位置在ai,后一个在bi. Sum(bi-ai)=(2+3+4+5+6+. ...

  3. Vue.js vuex

    1.前言 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它解决了vue中不同组件之间状态共享的问题. 通俗的说,它就是一个带响应式的全局变量管理,它数据的改变会触发相关页面/组件的更 ...

  4. git clone 需要密码

    在使用Git管理代码项目的过程中,经常需要使用到git clone命令来克隆远程仓库到本地.有时候会碰到克隆远程仓库需要输入密码才能进行的情况.本文将会介绍如何解决这个问题. git clone 需要 ...

  5. Tesseract开源的OCR工具及python pytesseract安装使用

    一 .介绍 Tesseract是一款由Google赞助的开源OCR. pytesseract是python包装器,它为可执行文件提供了pythonic API. Tesseract 已经有 30 年历 ...

  6. Qt编写安防视频监控系统36-onvif连续移动

    一.前言 时隔一年多,重新对视频监控系统的onvif内核重写,一方面为了兼容Qt6,一方面按功能分类提高效率.整体逻辑思路是一样的,主要的改动是由于Qt6不再支持QtXmlPatterns模块(其实这 ...

  7. 即时通讯技术文集(第22期):IM安全相关文章(Part1) [共13篇]

    ​为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第22 期. [- 1 -] 即时通讯安全篇(一):正确地理解和使用Android端加密算法 ...

  8. 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等

    本文作者潘唐磊,腾讯WXG(微信事业群)开发工程师,毕业于中山大学.内容有修订. 1.内容概述 本文总结了企业微信的IM消息系统架构设计,阐述了企业业务给IM架构设计带来的技术难点和挑战,以及技术方案 ...

  9. jdk8之stream原理及流创建、排序、转换等处理

    目录 一.为什么需要 Stream 二.什么是流 三.流的分类 1.有多种方式生成 Stream Source 2.流的操作类型 四.流的创建 1.数组和集合创建流 2.基本数值型流 3.数值流的构造 ...

  10. 如何快速的开发一个完整的iOS直播app(采集篇)

    作者:袁峥链接:https://www.jianshu.com/p/c71bfda055fa来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 开发一款直播app,首先需要 ...