[BZOJ4568][Scoi2016]幸运数字 倍增+线性基
4568: [Scoi2016]幸运数字
Time Limit: 60 Sec Memory Limit: 256 MB
Submit: 1791 Solved: 685
[Submit][Status][Discuss]
Description
Input
Output
输出需要包含 q 行,每行包含 1 个非负整数,表示这名旅行者可以保留的最大幸运值。
Sample Input
11 5 7 9
1 2
1 3
1 4
2 3
1 4
Sample Output
11
HINT
Source
树上倍增维护线性基
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 20005
#define ll long long
using namespace std;
ll fa[maxn][],s[maxn][][];
ll n,q,a[maxn];
ll tmp[];
int dep[maxn];
struct data {
int to,next;
}e[maxn*];
int head[maxn],cnt;
void add(int u,int v) {e[cnt].next=head[u];e[cnt].to=v;head[u]=cnt++;}
void build(ll *t1,ll t2) {
for(int i=;i>=;i--) {
if((t2>>i)&1ll) {
if(!t1[i]) {t1[i]=t2;return;}
else t2^=t1[i];
}
}
}
void merge(ll *t1,ll *t2) {for(int i=;i>=;i--) if(t2[i]) build(t1,t2[i]);}
void dfs(int x,int f) {
dep[x]=dep[f]+;
build(s[x][],a[x]);
for(int i=;i<=;i++) fa[x][i]=fa[fa[x][i-]][i-];
for(int i=;i<=;i++) {
memcpy(s[x][i],s[x][i-],sizeof(s[x][i-]));
merge(s[x][i],s[fa[x][i-]][i-]);
}
for(int i=head[x];i>=;i=e[i].next) {
int to=e[i].to;if(to==f) continue;
fa[to][]=x;
dfs(to,x);
}
} int lca(int x,int y) {
if(dep[x]<dep[y]) swap(x,y);
int t=dep[x]-dep[y];
for(int i=;i>=;i--) if((t>>i)&) {merge(tmp,s[x][i]);x=fa[x][i];}
for(int i=;i>=;i--) if(fa[x][i]!=fa[y][i]) {merge(tmp,s[x][i]);merge(tmp,s[y][i]);x=fa[x][i],y=fa[y][i];}
if(x==y) return x;
merge(tmp,s[x][]);merge(tmp,s[y][]);
return fa[x][];
} int main() {
memset(head,-,sizeof(head));
scanf("%lld%lld",&n,&q);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
for(int i=;i<n;i++) {
int u,v;
scanf("%d%d",&u,&v);add(u,v);add(v,u);
}
dfs(,);
for(int i=;i<=q;i++) {
memset(tmp,,sizeof(tmp));
int x,y;
scanf("%d%d",&x,&y);
int z=lca(x,y);merge(tmp,s[z][]);
ll ans=;
for(int j=;j>=;j--) ans=max(ans,ans^tmp[j]);
printf("%lld\n",ans);
}
}
[BZOJ4568][Scoi2016]幸运数字 倍增+线性基的更多相关文章
- 【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 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一 ...
- 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...
随机推荐
- 下拉框select chosen被遮盖
最简单的就是让容器高度大点. 用js调整也行. 为什么z-index不管事,看下面... 浏览器支持 所有主流浏览器都支持 z-index 属性. 注释:任何的版本的 Internet Explore ...
- Graphic的一些基本概念
做了张很丑陋的图,估计还不准确...先凑合看吧~
- C++——类继承以及类初始化顺序
对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...
- Tourists——圆方树
CF487E Tourists 一般图,带修求所有简单路径代价. 简单路径,不能经过同一个点两次,那么每个V-DCC出去就不能再回来了. 所以可以圆方树,然后方点维护一下V-DCC内的最小值. 那么, ...
- 【BZOJ 2324】[ZJOI2011]营救皮卡丘 费用流
本人实行诱骗拐卖(利用自然分层与实际意义),正解拼接补充(充分利用最大流限制(不浪费任何一个走出去的机会而不是不浪费任何一个已有的流)与问题转换) #include <cstdio> #i ...
- CodeForces743E. Vladik and cards 二分+状压dp
这个题我们可以想象成_---___-----__的一个水柱它具有一遍优一遍行的性质因此可以用来二分最小值len,而每次二分后我们都要验根,we可以把这个水柱想成我们在每个数段里取前一段的那个数后一段有 ...
- [链接] Linux下常见的~/.bashrc、/etc/profile、/etc/ld.so.config小科普以及caffe编译遇到的相关问题解决
由于博主设置禁止转载,这里贴一个链接,http://blog.csdn.net/u014266895/article/details/61928602,内容很有用,linux下很多软件问题都是各种路径 ...
- Git命令文本手册
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...
- centos7 mysql cluster集群搭建基于docker
1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...
- Spring学习-- IOC 容器中 bean 的生命周期
Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务. Spring IOC 容器对 bean 的生命周期进行管理的过程: 通过 ...