【BZOJ4568】[Scoi2016]幸运数字 倍增+线性基
【BZOJ4568】[Scoi2016]幸运数字
Description
Input
Output
输出需要包含 q 行,每行包含 1 个非负整数,表示这名旅行者可以保留的最大幸运值。
Sample Input
11 5 7 9
1 2
1 3
1 4
2 3
1 4
Sample Output
11
题解:求LCA可以用倍增,同时,我们还可以维护f[i][j]表示从i往上的2j个点中,所有权值的线性基。然后查询的时候我们把路径上的线性基都拿出来一起消一下,贪心求最大值就行了。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=20005;
typedef long long ll;
int n,m,cnt;
int fa[15][maxn],dep[maxn],to[maxn<<1],next[maxn<<1],head[maxn];
struct node
{
int siz;
ll v[61];
node (){memset(v,0,sizeof(v)),siz=0;}
ll gauss(ll x)
{
int i;
for(i=0;i<siz;i++) if((v[i]^x)<x) x^=v[i];
if(x)
{
v[siz++]=x;
for(i=siz-1;i;i--) if(v[i-1]<v[i]) swap(v[i-1],v[i]);
}
return x;
}
ll query()
{
ll ret=0;
for(int i=0;i<siz;i++) if((ret^v[i])>ret) ret^=v[i];
return ret;
}
}s[15][maxn];
ll rd()
{
ll ret=0; char gc=getchar();
while(gc<'0'||gc>'9') gc=getchar();
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret;
}
void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
void dfs(int x)
{
for(int i=head[x];i!=-1;i=next[i])
if(to[i]!=fa[0][x])
fa[0][to[i]]=x,dep[to[i]]=dep[x]+1,dfs(to[i]);
}
int main()
{
//freopen("bz4568.in","r",stdin);
n=rd(),m=rd();
int i,j,k,a,b;
for(i=1;i<=n;i++) s[0][i].gauss(rd());
memset(head,-1,sizeof(head));
for(i=1;i<n;i++) a=rd(),b=rd(),add(a,b),add(b,a);
dep[1]=1,dfs(1);
for(j=1;(1<<j)<=n;j++)
{
for(i=1;i<=n;i++)
{
for(k=0;k<s[j-1][i].siz;k++) s[j][i].gauss(s[j-1][i].v[k]);
for(k=0;k<s[j-1][fa[j-1][i]].siz;k++) s[j][i].gauss(s[j-1][fa[j-1][i]].v[k]);
fa[j][i]=fa[j-1][fa[j-1][i]];
}
}
for(i=1;i<=m;i++)
{
a=rd(),b=rd();
node ans;
if(dep[a]<dep[b]) swap(a,b);
for(j=14;j>=0;j--)
{
if(dep[fa[j][a]]>=dep[b])
{
for(k=0;k<s[j][a].siz;k++) ans.gauss(s[j][a].v[k]);
a=fa[j][a];
}
}
if(a!=b)
{
for(j=14;j>=0;j--)
{
if(fa[j][a]!=fa[j][b])
{
for(k=0;k<s[j][a].siz;k++) ans.gauss(s[j][a].v[k]);
for(k=0;k<s[j][b].siz;k++) ans.gauss(s[j][b].v[k]);
a=fa[j][a],b=fa[j][b];
}
}
ans.gauss(s[0][a].v[0]),ans.gauss(s[0][b].v[0]),ans.gauss(s[0][fa[0][a]].v[0]);
}
else ans.gauss(s[0][a].v[0]);
printf("%lld\n",ans.query());
}
return 0;
}
【BZOJ4568】[Scoi2016]幸运数字 倍增+线性基的更多相关文章
- [BZOJ4568][Scoi2016]幸运数字 倍增+线性基
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1791 Solved: 685[Submit][Statu ...
- 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 ...
随机推荐
- LeetCode OJ-- Recover Binary Search Tree ***@
https://oj.leetcode.com/problems/recover-binary-search-tree/ 一棵二叉搜索树,二叉搜索树的特征是,中根遍历的话,得到的序列是递增的 题目中, ...
- DB2时间函数 实现 时间加减
时间加减:后边记得跟上时间类型如day.HOUR TIMESTAMP ( TIMESTAMP(DEF_TIME)+1 day)+18 HOUR DB2时间函数是我们最常见的函数之一,下面就为您介绍 ...
- (19)python scrapy框架
安装scrapy pycharm 建个纯python工程 settings里 环境变量设置 C:\Python27;C:\Python27\Scripts; 下载win32api https://so ...
- ELK最佳实践
1.ELK最佳实践解析 a.用户通过nginx或haproxy访问ELK日志统计平台,IP地址为keepalived的vip地址; b.nginx将请求转发到kibana; c.kibana到es获取 ...
- 【转】【Stackoverflow好问题】去掉烦人的“!=null"(判空语句)
[Stackoverflow好问题]去掉烦人的“!=null"(判空语句) 问题 为了避免空指针调用,我们经常会看到这样的语句 ...if (someobject != null) { ...
- workflow engine Ruote初体验之一(概念)
由于最近自己写点小东西,需要有工作流程管理方面的应用,所有的环境为Ruby on rails,所有在选择流程引擎的时候选择了ruote,但是对于ruote是完全陌生的,所以在这里记下点滴,如果理解的不 ...
- ios svn学习笔记(一)
1, 遇到问题 git add in Xcode generates com.apple.dt.IDESourceControlErrorDomain error -70 这个错误发生在要右键选择要c ...
- QQ分享到电脑SDK bug
问题:当图文(图片+文字+url)混合分享到我的电脑时,就会出bug,只显示图片. 经过测试: params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL," ...
- 真正解决 thinkphp 验证码 出错 无法显示 问题
今天做到验证码这一块想到tp自带验证图片 大喜单鼓捣半天不出来 一直是个小 X 官方提示:如果无法显示验证码,请检查:² PHP是否已经安装GD库支持:²输出之前是否有任何的输出(尤其是UTF8的B ...
- TensorFlow笔记五:将cifar10数据文件复原成图片格式
cifar10数据集(http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz)源格式是数据文件,因为训练需要转换成图片格式 转换代码: 注意文件路 ...