P3292 [SCOI2016]幸运数字

想法

倍增加上线性基就行惹

线性基的合并可以通过把一个线性基的元素插入到另一个里实现

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define N 20005
#define M 40005 ll cnt,v[N],G[N][21][62],head[N],dep[N];
ll fa[N][21],ans[62]; struct P{
int to,next;
}e[M]; void add(int x,int y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
} void insert(ll *a,ll val){
for(int i = 61;i >= 0;--i){
if((val >> i) & 1){
if(!a[i]){
a[i] = val;
break;
}
val ^= a[i];
}
}
} void Merge(ll *a,ll *b){
for(int i = 61;i >= 0;--i){
if(b[i])
insert(a,b[i]);
}
} void dfs(ll u,ll f){
fa[u][0] = f;
dep[u] = dep[f] + 1;
for(int i = head[u];i;i = e[i].next){
ll v = e[i].to;
if(v == f)
continue;
dfs(v,u);
}
} ll n,q; void getlca(){
for(int j = 1;j <= 20;++j)
for(int i = 1;i <= n;++i){
fa[i][j] = fa[fa[i][j - 1]][j - 1];
std::memcpy(G[i][j],G[i][j - 1],sizeof(G[i][j - 1]));
Merge(G[i][j],G[fa[i][j - 1]][j - 1]);
}
} void lca(ll x,ll y){
if(dep[x] < dep[y])
std::swap(x,y);
for(int i = 20;i >= 0;--i){
if(dep[fa[x][i]] >= dep[y]){
Merge(ans,G[x][i]);
x = fa[x][i];
}
}
if(x == y){
Merge(ans,G[x][0]);
return;
}
for(int i = 20;i >= 0;--i){
if(fa[x][i] != fa[y][i]){
Merge(ans,G[x][i]);
Merge(ans,G[y][i]);
x = fa[x][i];
y = fa[y][i];
}
}
Merge(ans,G[x][0]),Merge(ans,G[y][0]),Merge(ans,G[fa[x][0]][0]);
return;
} inline ll read(){
ll ans = 0,f = 1;
char a = getchar();
while(a < '0' && a > '9' && (a != '-'))
a = getchar();
if(a == '-')
f = -1,a = getchar();
while(a <= '9' && a >= '0'){
ans = (ans << 3) + (ans << 1) + (a - '0'),a = getchar();
}
return ans * f;
} int main(){
n = read(),q = read();
for(int i = 1;i <= n;++i)
insert(G[i][0],read());
for(int i = 1;i <= n - 1;++i){
ll x = read(),y = read();
add(x,y);
add(y,x);
}
dfs(1,0);
getlca();
for(int i = 1;i <= q;++i){
ll u = read(),v = read();
std::memset(ans,0,sizeof(ans));
lca(u,v);
ll sum = 0;
for(int i = 61;i >= 0;--i){
if(ans[i])
sum = std::max(sum,sum ^ (ans[i]));
}
std::cout<<sum<<std::endl;
}
}

【 [SCOI2016]幸运数字】的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)

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

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

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

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

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

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

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

随机推荐

  1. vue3 element-plus 配置json快速生成form表单组件,提升生产力近600%(已在公司使用,持续优化中)

    ️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农‍♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...

  2. 【c++ Prime 学习笔记】第7章 类

    类的基本思想是数据抽象和封装 数据分离抽象是一种依赖于接口和实现分离的编程/设计技术.接口包括用户能执行的操作,实现包括类的数据成员.接口实现的函数体.定义类所需的各种私有函数 封装实现了类的接口和实 ...

  3. Sequence Model-week3编程题1-Neural Machine Translation with Attention

    1. Neural Machine Translation 下面将构建一个神经机器翻译(NMT)模型,将人类可读日期 ("25th of June, 2009") 转换为机器可读日 ...

  4. Scrum Meeting 0429

    零.说明 日期:2021-4-29 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分后端管理 ...

  5. Beta阶段第十次会议

    Beta阶段第十次会议 时间:2020.5.26 完成工作 姓名 完成工作 难度 完成度 ltx 1.修正小程序新闻bug2.修正小程序认证bug 中 80% xyq 1.上传信息编辑部分代码到服务器 ...

  6. [对对子队]团队任务拆解Alpha

    Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...

  7. 【做题记录】[NOIP2016 普及组] 魔法阵

    P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...

  8. Python import cStringIO ImportError: No module named 'cStringIO'

    From Python 3.0 changelog; The StringIO and cStringIO modules are gone. Instead, import the io modul ...

  9. C#写TXT文档

    //C#写TXT文档 String strDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAs ...

  10. js this指向汇总

    this指向 普通函数  window 定时器函数         window 事件函数 事件源 箭头函数 父function中的this,没有就是window 对象函数 对象本身 构造函数 实例化 ...