[luogu3292]幸运数字
考虑点分治,将询问离线后计算重心到每一个点的线性基,然后再询问重心到每一个点的线性基,时间复杂度为$o(3600q)$,可以过(然而太菜的我写了倍增维护线性基,震惊于倍增和线性基常数之小)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 20005
4 #define oo 0x3f3f3f3f
5 #define ll long long
6 struct ji{
7 ll a[61];
8 }o,dp[N][21];
9 struct ji2{
10 int nex,to;
11 }edge[N<<1];
12 int E,n,m,x,y,head[N],in[N],out[N],f[N][21];
13 ll a[N];
14 bool pd(int x,int y){
15 return (in[x]<=in[y])&&(out[y]<=out[x]);
16 }
17 void add(int x,int y){
18 edge[E].nex=head[x];
19 edge[E].to=y;
20 head[x]=E++;
21 }
22 void add(ji &x,ll y){
23 for(int i=60;i>=0;i--)
24 if (y&(1LL<<i))
25 if (x.a[i])y^=x.a[i];
26 else{
27 x.a[i]=y;
28 break;
29 }
30 }
31 void merge(ji &x,ji y){
32 for(int i=0;i<=60;i++)
33 if (y.a[i])add(x,y.a[i]);
34 }
35 void dfs(int k,int fa){
36 in[k]=++x;
37 f[k][0]=fa;
38 add(dp[k][0],a[k]);
39 for(int i=1;i<=20;i++){
40 f[k][i]=f[f[k][i-1]][i-1];
41 dp[k][i]=dp[k][i-1];
42 merge(dp[k][i],dp[f[k][i-1]][i-1]);
43 }
44 for(int i=head[k];i!=-1;i=edge[i].nex)
45 if (edge[i].to!=fa)dfs(edge[i].to,k);
46 out[k]=++x;
47 }
48 ji calc(int x,int y){
49 if (x==y)return dp[x][0];
50 ji z;
51 memset(z.a,0,sizeof(z.a));
52 for(int i=20;i>=0;i--)
53 if (!pd(f[x][i],y)){
54 merge(z,dp[x][i]);
55 x=f[x][i];
56 }
57 for(int i=20;i>=0;i--)
58 if (!pd(f[y][i],x)){
59 merge(z,dp[y][i]);
60 y=f[y][i];
61 }
62 merge(z,dp[x][pd(x,y)^1]);
63 if (!pd(y,x))merge(z,dp[y][0]);
64 return z;
65 }
66 ll query(ji o){
67 ll ans=0;
68 for(int j=60;j>=0;j--)
69 if ((ans&(1LL<<j))==0)ans^=o.a[j];
70 return ans;
71 }
72 int main(){
73 scanf("%d%d",&n,&m);
74 memset(head,-1,sizeof(head));
75 for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
76 for(int i=1;i<n;i++){
77 scanf("%d%d",&x,&y);
78 add(x,y);
79 add(y,x);
80 }
81 dfs(1,1);
82 for(int i=1;i<=m;i++){
83 scanf("%d%d",&x,&y);
84 printf("%lld\n",query(calc(x,y)));
85 }
86 }
[luogu3292]幸运数字的更多相关文章
- luogu3292 幸运数字 (点分治+线性基)
首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...
- BZOJ 1853 【Scoi2010】 幸运数字
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认 为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,8 ...
- BZOJ 4568 幸运数字
题目传送门 4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Description A 国共有 n 座城市,这些城市由 n-1 ...
- BZOJ 1853: [Scoi2010]幸运数字
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2117 Solved: 779[Submit][Status] ...
- 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 238 Solved: 113[Submit][Status ...
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- BZOJ1853 [Scoi2010]幸运数字
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 【bzoj1853】 Scoi2010—幸运数字
http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...
- 幸运数字(number)
幸运数字(number) Time Limit:1000ms Memory Limit:64MB [题目描述] LYK最近运气很差,例如在NOIP初赛中仅仅考了90分,刚刚卡进复赛,于是它决定使用 ...
随机推荐
- Java初步学习——2021.10.05每日总结,第五周周三
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学了对象与类,如何定义类和创建对象,以及构建方法的用法. 明天课比较多,把今天未学的例子敲一遍好了. 没有遇到什么问题.
- iNeuOS工业互联网操作系统,设备振动状态监测、预警和分析应用案例
目 录 1. 概述... 2 2. 系统部署结构... 2 3. 系统应用介绍... 4 4. 专业分析人员... 8 5. 应用案例分享 ...
- yum源安装nginx
nginx使用yum源安装 安装步骤 使用yum源安装依赖 yum install yum-utils 配置nginx.repo的yum文件 vim /etc/yum.repos.d/nginx.re ...
- SharkCTF2021 bybypass&baby_phpserialize题记
(国庆褪10天了 先水一篇) bybypass: payload:?anime_is_bae=hehellotherehoomanllotherehooman baby_phpserialize ro ...
- [对对子队]会议记录4.20(Scrum Meeting11)
今天已完成的工作 何瑞 工作内容:搭建第三关,添加了运行指令标识 相关issue:搭建关卡2.3 相关签入:4.20签入1 4.20签入2 吴昭邦 工作内容:搭建第三关 相关iss ...
- the Agiles Scrum Meeting 4
会议时间:2020.4.12 20:00 1.每个人的工作 今天已完成的工作 yjy:基本完成广播功能,修复bug issues:小组任务1-增量开发组 Bug:冲刺 wjx:继续实现注销功能的后端 ...
- 搬运2:早期写的探究printf
目录: 1. 关于printf格式化输出 2. printf的一般形式 3. 转换说明 4. 格式化输出的意义 5. 转换说明修饰符 6. 修饰符中的标记 7. printf的返回值 ps:共3250 ...
- NorFlash、NandFlash在技术和应用上有些什么区别?
首先你要搞懂什么是Flash Memory? Flash Memory(快闪存储器),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器.这种科技主要用于一般性数据存储,以及在 ...
- oracle物化视图创建及删除
--删除物化表的日志表 DROP MATERIALIZED VIEW LOG ON 表名; --为将要创建物化视图的表添加带主键的日志表 CREATE MATERIALIZED VIEW LOG ON ...
- vim 让人爱不释手的编辑器之神
VIM 基本介绍 vim诞生已有20多年,它常被人称之为编辑器之神,vim的操作理念可以说是独具一格而又出类拔萃,使用vim能极大的提升文本处理效率,因此熟练掌握vim应该是每个程序员都应该做到的事情 ...