[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分,刚刚卡进复赛,于是它决定使用 ...
随机推荐
- 小白自制Linux开发板 四. 通过SPI使用ESP8266做无线网卡
本文章基于 WhyCan Forum(哇酷开发者社区) https://whycan.com/t_4149.htmlhttps://whycan.com/t_5870.html整理而成. 为了尊重原作 ...
- Ubuntu安装 配置GCC和Vim
VMware14.0和Ubuntu镜像安装 https://mp.weixin.qq.com/s/045wrbdv92PkUQn2abddvA 适应屏幕设置 按照下列流程检查虚拟机设置 查看 -> ...
- python json中的 dumps loads函数
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- jenkins的安装、配置使用
1.jenkins的使用 (1).需要先下载安装JDK 配置jdk的环境 变量JAVA_HOME的值是 jdk 的安装位置, 然后下载安装tomcat 安装好了之后,打开tomcat下的bin文件夹, ...
- Hive面试题整理(一)
1.Hive表关联查询,如何解决数据倾斜的问题?(☆☆☆☆☆) 1)倾斜原因:map输出数据按key Hash的分配到reduce中,由于key分布不均匀.业务数据本身的特.建表时考虑不周.等原因 ...
- Less-(38~41) 堆叠注入
首先申明,Less-(38~41)可以采取和Less-(1~4)相同的解法:(一一对应) 然而,他们的漏洞其实更大,我们可以做更多具有破坏性的事情. 代码审计: Less-(38~41): 41的$s ...
- Java:并发笔记-03
Java:并发笔记-03 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 3. 共享模型之管程-2 本章内容-2 Monitor wait/notify 3.6 ...
- MySQL:基础语法-2
MySQL:基础语法-2 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 上文MySQL:基 ...
- 【二食堂】Alpha - 项目展示
项目展示 1. 团队介绍 二食堂很难排队 姓名 介绍 职务 刘享 热爱游戏,尤其是RPG和metrovinia类的游戏. 会C/C++, python, java. 后端 左正 一个普通的大学生,Py ...
- 【学习笔记】Vizing 定理
图染色问题的经典结论 定义 称一个边染色方案合法当且仅当每个顶点连出的所有边的颜色都互不相同,如果此时出现了 \(k\) 个颜色那么称该方案是图的一组 \(k\) 染色 一张无向图的边着色数为最小的 ...