题意

题目链接

Sol

线性基是可以合并的

倍增维护一下

然后就做完了??

喵喵喵?

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 2e4 + 10, B = 60;
inline LL read() {char c = getchar(); LL x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, Q, g[MAXN][16], dep[MAXN];
LL a[MAXN];
vector<int> v[MAXN];
struct Node {LL P[62];Node() {memset(P, 0, sizeof(P));}void insert(LL x) {for(int i = B; i >= 0; i--) {if((!(x >> i & 1))) continue;if(P[i]) {x ^= P[i]; continue;}P[i] = x; break;}}LL QueryMax() {LL ans = 0;for(int i = B; i >= 0; i--) ans = max(ans, ans ^ P[i]);return ans;}Node operator + (const Node &rhs) const {Node ans; for(int i = 0; i <= B; i++) ans.P[i] = this -> P[i];for(int i = 0; i <= B; i++) if(rhs.P[i]) ans.insert(rhs.P[i]);return ans; }
}f[MAXN][16];
void dfs(int x, int fa) {dep[x] = dep[fa] + 1;g[x][0] = fa;f[x][0].insert(a[x]); f[x][0].insert(a[fa]);for(int i = 0; i < v[x].size(); i++) {int to = v[x][i];if(to == fa) continue;dfs(to, x);}
}
void Pre() {for(int j = 1; j <= 15; j++)for(int i = 1; i <= N; i++)g[i][j] = g[g[i][j - 1]][j - 1], f[i][j] = f[i][j - 1] + f[g[i][j - 1]][j - 1];
}
LL Query(int x, int y) {Node base; base.insert(a[x]); base.insert(a[y]);if(dep[x] < dep[y]) swap(x, y);for(int i = 15; i >= 0; i--)if(dep[g[x][i]] >= dep[y])base = base + f[x][i], x = g[x][i];if(x == y) return base.QueryMax();for(int i = 15; i >= 0; i--)if(g[x][i] != g[y][i]) {base = base + f[x][i];base = base + f[y][i];x = g[x][i], y = g[y][i];}base = base + f[x][0]; base = base + f[y][0];return base.QueryMax();
}
int main() {
#ifndef ONLINE_JUDGE//freopen("a.in", "r", stdin); freopen("b.out", "w", stdout);
#endifN = read(); Q = read();for(int i = 1; i <= N; i++) a[i] = read();for(int i = 1; i <= N - 1; i++) {int x = read(), y = read();v[x].push_back(y); v[y].push_back(x);}dfs(1, 0);Pre();while(Q--) {int x = read(), y = read();printf("%lld\n", Query(x, y));}return 0;
}
/*
8 4
45654 251 321 54687 321321 654 6321432 5646
1 2
2 3
2 4
1 5
4 6
6 7
5 87 8
7 5
6 8
4 1
*/

转载于:https://www.cnblogs.com/zwfymqz/p/10059651.html

BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)相关推荐

  1. Bzoj4568: [Scoi2016]幸运数字

    Bzoj4568: [Scoi2016]幸运数字 线性基+倍增+LCA 原来线性基还能这么考--一开始看到这个题以为是树上差分线性基,然而线性基不支持删除,所以就挂了. 后来想到倍增线性基,其实到这里 ...

  2. BZOJ4568 [Scoi2016]幸运数字

    BZOJ4568 [Scoi2016]幸运数字 题目描述 传送门 题目分析 这个题,求树上链的\(XOR\)最大值,可以不选某些点. 考虑到线性基可以用很快的速度求出\(XOR\)的最大值,我们首先可 ...

  3. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MB Submit: 2131  Solved: 865 [Submit][Sta ...

  4. bzoj 4568: [Scoi2016]幸运数字(树上倍增+线性基)

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MB Submit: 1692  Solved: 643 [Submit][Sta ...

  5. [bzoj4568][Scoi2016]幸运数字

    来自FallDream的博客,未经允许,请勿转载,谢谢. A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这 ...

  6. BZOJ4568 : [Scoi2016]幸运数字

    树的点分治,每次求出重心后,求出重心到每个点路径上的数的线性基. 对于每个询问,只需要暴力合并两个线性基即可. 时间复杂度$O(60n\log n+60^2q)$. #include<cstdi ...

  7. P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)

    P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...

  8. [洛谷P3292] [SCOI2016]幸运数字

    洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...

  9. 【BZOJ4568】幸运数字,树链剖分/倍增+维护线性基

    Time:2016.09.06 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 对于两个线性基数组a,b,直接向b中加a的元素进行线性基合并就可以了 复杂度O(P2)O(P^2)其中 ...

最新文章

  1. ue4蓝图节点手册中文_在UE4中播放视频
  2. 宏基因组合种树,2-4天领证
  3. linux下Redis以及phpredis扩展安装
  4. Ganglia 权威指南-安装Ganglia过程
  5. 【RN6752】模拟高清AHD芯片或成为车机新标配
  6. c语言输入身高计算标准体重_体质测试 | 身高 / 体重测试评分标准及方法
  7. tas5782m功率调试
  8. 永远的道长——林正英
  9. larval助手函数——larval中文文档
  10. 林俊杰的新专集太好听了...不能忍了
  11. 外边距与内边距的区别
  12. Java实习面试重点基础知识
  13. 毕业设计智慧停车场--车牌识别树莓派环境搭建
  14. macmini时间机器备份文件服务器,用普通NAS代替苹果Time Machine 功能实现MAC的时间机器...
  15. 计算机开机没反应怎么办,电脑开机没反应怎么办 开机没反应解决方法推荐
  16. 教程:Yolo5训练自己的数据集以及安装教程
  17. 计算机辅助训练对吞咽障碍,吞咽障碍的六大家庭训练方法
  18. 一文搞懂Nginx限流(简单实现)
  19. Twitter实时搜索系统EarlyBird
  20. https://www.jianshu.com/p/15c85b1901f7

热门文章

  1. PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
  2. 关于WPF的ComboBox中Items太多而导致加载过慢的问题
  3. 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)
  4. 中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
  5. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...
  6. css 加载动画如何生效,CSS 加载动画
  7. 安徽全国计算机缴费,全国计算机等级考试3月报名 安徽首次网上报名缴费
  8. qt 显示加速_新能源 | 吉利星越ePro上市 补贴后17.58万起售 加速更快油耗更低
  9. c语言相邻字符串字面量,C语言预处理#运算符的细节
  10. snowflake mysql_snowflake数据库