[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分,刚刚卡进复赛,于是它决定使用 ...
随机推荐
- 从零入门 Serverless | 一文详解 Serverless 技术选型
作者 | 李国强 阿里云资深产品专家 今天来讲,在 Serverless 这个大领域中,不只有函数计算这一种产品形态和应用类型,而是面向不同的用户群体和使用习惯,都有其各自适用的 Serverless ...
- Python笔记_1语法总结
前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...
- FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- Go语言核心36讲(Go语言进阶技术三)--学习笔记
09 | 字典的操作和约束 至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天 ...
- 解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
参考链接[侵权删] https://www.jianshu.com/p/3378fa827924 https://yq.aliyun.com/articles/619208 问题描述:在Windows ...
- 在Vue&Element前端项目中,对于字典列表的显示处理
在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...
- luogu P4243 [JSOI2009]等差数列 题解
前言: 这题真ex... 强烈谴责在题解里面放毒瘤题链接的屑出题人! 吐 ️ 解析: 这题分成两步走. 首先,既然题目中的修改操作是区间加等差数列,那么就容易想到在差分数组上进行操作. 然后就是相当恶 ...
- 大型DELETE(删除大量数据)的一种解决方案
通过执行单条DELETE语句来删除一个大型的数据集会有以下的缺点: 1.DELETE语句的操作要被完整地记录到日志中,这要求在事务日志中要有足够的空间以完成整个事务: 2.在删除操作期间(可能会花费很 ...
- dhcpd 启动失败No subnet declaration for wlan0
今天在调试机器的WIFI热点,好不容易把dhcp编译打包进去,服务启动出现报错No subnet declaration for wlan0,详细信息如下: Internet Systems Cons ...
- Python matplotlib pylab 画张图
from pylab import * w1 = 1 w2 = 25 fs = 18 y = np.arange(-2,2,0.001) x = w1*y*log(y)-1.0/w2*exp(-(w2 ...