考虑点分治,将询问离线后计算重心到每一个点的线性基,然后再询问重心到每一个点的线性基,时间复杂度为$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]幸运数字的更多相关文章

  1. luogu3292 幸运数字 (点分治+线性基)

    首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...

  2. BZOJ 1853 【Scoi2010】 幸运数字

    Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认 为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,8 ...

  3. BZOJ 4568 幸运数字

    题目传送门 4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Description A 国共有 n 座城市,这些城市由 n-1 ...

  4. BZOJ 1853: [Scoi2010]幸运数字

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2117  Solved: 779[Submit][Status] ...

  5. 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 238  Solved: 113[Submit][Status ...

  6. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  7. BZOJ1853 [Scoi2010]幸运数字

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. 【bzoj1853】 Scoi2010—幸运数字

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...

  9. 幸运数字(number)

    幸运数字(number) Time Limit:1000ms   Memory Limit:64MB [题目描述] LYK最近运气很差,例如在NOIP初赛中仅仅考了90分,刚刚卡进复赛,于是它决定使用 ...

随机推荐

  1. 12种 vo2dto 方法,就 BeanUtils.copyProperties 压测最拉胯!【快双11了,别用错喽】

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/Xq7oQg7dYESMYxHVnxX8Dw 沉淀.分享.成长,让自己和他人都能 ...

  2. bzoj1341 名次排序问题rank sorting(dp,考虑到对未来的贡献)

    QWQ啊 这个题可以说是我目前碰到过的最难理解的dp之一了. 题目大意: 已知参赛选手的得分,你的任务是按照得分从高到底给出选手的排名.遗憾的是,保存选手信息的数据结构只支持 一种操作,即将一个选手从 ...

  3. 洛谷4360[CEOI2004]锯木厂选址 (斜率优化+dp)

    qwq 我感觉这都已经不算是斜率优化\(dp\)了,感觉更像是qwq一个\(下凸壳优化\)转移递推式子. qwq 首先我们先定义几个数组 \(sw[i]\)表示\(w[i]\)的前缀和 \(val[i ...

  4. java设计模式_工厂模式

    关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...

  5. gitk

    gitk gitk [<options>] [<revision range>] [--] [<path>-] 查看单个文件的变更历史 gitk -- CppPri ...

  6. 在hive中使用COALESCE进行空值处理

    COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空值,最终将返 ...

  7. cookie和session和localStorage的区别

    这三个都是保存在浏览器端,而且都是同源的. Session仅在当前浏览器窗口关闭有效,不能持久保存 Localstorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据 Cookie只在设置 ...

  8. OO第四单元作业总结及课程总结

    一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...

  9. 2020年OO助教工作总结

    随着这学期课程的落幕,我一学期的OO助教工作也宣告结束.这学期我的工作主要在系统组,和OO后台的数据库打交道. 作业查重 我几乎每周都会做的例行工作,是对每周的homework进行查重管理.由于使用了 ...

  10. Noip模拟33垫底反思 2021.8.8

    T1 Hunter 考场上没写$%p$挂了25分.也是很牛皮,以后打完过了样例一定要检查 因为样例太小了......很容易忘记%%%% 正解随便手模就出来了. 1 #include<bits/s ...