AC日记——「SCOI2016」幸运数字 LiBreOJ 2013
思路:
代码:
#include <bits/stdc++.h>
using namespace std;
#define maxn 20005
#define ll long long
struct DataType {
ll d[],p[];
ll cnt;
DataType()
{
memset(d,,sizeof(d));
memset(p,,sizeof(p));
cnt=;
}
bool insert(long long val)
{
for(ll i=;i>=;i--)
{
if(val&(1LL<<i))
{
if(!d[i])
{
d[i]=val;
break;
}
val^=d[i];
}
}
return val>;
}
ll Max()
{
ll res=;
for(ll i=;i>=;i--)
{
if((res^d[i])>res) res^=d[i];
}
return res;
}
};
struct DataType ans;
struct TreeNodeType {
ll l,r,mid;
DataType data;
};
struct TreeNodeType tree[maxn<<];
ll n,m,deep[maxn],id[maxn],size[maxn],f[maxn],head[maxn];
ll E[maxn<<],V[maxn<<],tot,ai[maxn],bi[maxn],lar[maxn];
ll top[maxn];
inline void in(ll &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'')Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
}
void edge_add(ll u,ll v)
{
E[++tot]=head[u],V[tot]=v,head[u]=tot;
E[++tot]=head[v],V[tot]=u,head[v]=tot;
}
void merge(DataType &a,DataType b)
{
for(ll i=;i<=;i++)
{
if(b.d[i]) a.insert(b.d[i]);
}
}
void dfs1(ll now,ll fa)
{
f[now]=fa,deep[now]=deep[fa]+,size[now]=;
for(ll i=head[now];i;i=E[i])
{
if(V[i]==fa) continue;
dfs1(V[i],now),size[now]+=size[V[i]];
if(size[lar[now]]<size[V[i]]) lar[now]=V[i];
}
}
void dfs2(ll now,ll chain)
{
top[now]=chain,id[now]=++tot,bi[tot]=ai[now];
if(lar[now])
{
dfs2(lar[now],chain);
for(ll i=head[now];i;i=E[i])
{
if(V[i]==lar[now]||V[i]==f[now]) continue;
dfs2(V[i],V[i]);
}
}
}
void build(ll now,ll l,ll r)
{
tree[now].l=l,tree[now].r=r;
if(l==r)
{
tree[now].data.insert(bi[l]);
return;
}
tree[now].mid=l+r>>;
build(now<<,l,tree[now].mid),build(now<<|,tree[now].mid+,r);
tree[now].data=tree[now<<].data;
merge(tree[now].data,tree[now<<|].data);
}
void query(ll now,ll l,ll r)
{
if(tree[now].l>=l&&tree[now].r<=r)
{
merge(ans,tree[now].data);
return;
}
if(l<=tree[now].mid) query(now<<,l,r);
if(r>tree[now].mid) query(now<<|,l,r);
}
ll query(ll x,ll y)
{
for(int i=;i<=;i++) ans.d[i]=,ans.p[i]=;
ans.cnt=;
while(top[x]!=top[y])
{
if(deep[top[x]]<deep[top[y]]) query(,id[top[y]],id[y]),y=f[top[y]];
else query(,id[top[x]],id[x]),x=f[top[x]];
}
if(deep[x]>deep[y]) swap(x,y);
query(,id[x],id[y]);
return ans.Max();
}
int main()
{
freopen("data.txt","r",stdin);
in(n),in(m);ll u,v;
for(ll i=;i<=n;i++) in(ai[i]);
for(ll i=;i<n;i++)in(u),in(v),edge_add(u,v);
dfs1(,),tot=,dfs2(,),build(,,n);
while(m--) in(u),in(v),printf("%lld\n",query(u,v));
return ;
}
AC日记——「SCOI2016」幸运数字 LiBreOJ 2013的更多相关文章
- AC日记——「SCOI2016」背单词 LiBreOJ 2012
#2012. 「SCOI2016」背单词 思路: Orz: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...
- loj#2013. 「SCOI2016」幸运数字 点分治/线性基
题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...
- loj #2013. 「SCOI2016」幸运数字
#2013. 「SCOI2016」幸运数字 题目描述 A 国共有 n nn 座城市,这些城市由 n−1 n - 1n−1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以 ...
- AC日记——「SCOI2016」美味 LiBreOJ 2016
#2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...
- AC日记——「HNOI2017」单旋 LiBreOJ 2018
#2018. 「HNOI2017」单旋 思路: set+线段树: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- AC日记——「SCOI2015」国旗计划 LiBreOJ 2007
#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...
- AC日记——「SDOI2017」序列计数 LibreOJ 2002
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 201704 ...
- 「洛谷3292」「BZOJ4568」「SCOI2016」幸运数字【倍增LCA+线性基+合并】
[bzoj数据下载地址]不要谢我 先讲一下窝是怎么错的... \(MLE\)是因为数组开小了.. 看到异或和最大,那么就会想到用线性基. 如果不会线性基的可以参考一下我的学习笔记:「线性基」学习笔记a ...
- LOJ #2013「SCOI2016」幸运数字
时限为什么这么大啊 明摆着放多$ log$的做法过啊$QAQ$ LOJ #2013 题意 有$ Q$次询问,每次询问树上一条链,点有点权,你需要选择一些链上的点使得异或和尽量大 点数$ \leq 2* ...
随机推荐
- Mybatis手工写sql语句及Mapper.xml方法
首先在项目中 建一个mapper包,然后在spring集合mybatis的配置文件中设置扫描这个mapper包 然后,建 封装查询结果需要的 pojo 然后,在 mapper包中创建 Mapper接口 ...
- swift的一些东西
.cmd+k 键盘toggle .模拟器的handware设置ios键盘 .设置textfield的return类型为搜索 k.returnKeyType=UIReturnKeyType.search ...
- su对环境变量做了什么
服务器是ubuntu12.04 用一个账户app,使用su - app得到的环境变量和直接ssh登录的环境变量不同. 导致su - app,无法执行ifconfig su - app 的环境变量 /u ...
- oepncv-学习笔记一
安装opencv文件时若需要cmake编译,如果中间出现 解决办法是: 在opencv的文件中找到包含cmakelist.txt的文件夹,把where is the source code:的路径改成 ...
- Qt -------- 容器类
QVector(数组).QLinkedList(链表).QMap(映射表).QHash(哈希表).QQueue(队列) QHash遍历举例: 法1: QThread& ThreadHandle ...
- ELK6.0环境搭建及配置
ELK环境搭建及配置 ElasticSearch在5.x后的安装和插件的官方执行更好了,head插件官方默认集成在kibana的dev tools里,支持rpm包方式安装,x-pack安装后支持权限及 ...
- ObservableCollection 类
假设您正在创建 Windows 窗体应用程序,并且已将 DataGridView 控件绑定到标准 List(Of Customer) 数据结构.您希望能够使网格中的项目与基础数据源中的值保持同步.也就 ...
- MyBatis框架的使用及源码分析(一) 配置与使用
我们先来看一个例子,简单的了解一下mybatis的mapper接口方式的使用. package org.mybatis.spring.sample; import org.apache.ibatis. ...
- 单词转换成向量形式 word2vec
word2vec(word to vector)是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相 似度.word2ve ...
- 版本号中Snapshot的含义
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...