BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)
题意
题目链接
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]幸运数字(线性基 倍增)相关推荐
- Bzoj4568: [Scoi2016]幸运数字
Bzoj4568: [Scoi2016]幸运数字 线性基+倍增+LCA 原来线性基还能这么考--一开始看到这个题以为是树上差分线性基,然而线性基不支持删除,所以就挂了. 后来想到倍增线性基,其实到这里 ...
- BZOJ4568 [Scoi2016]幸运数字
BZOJ4568 [Scoi2016]幸运数字 题目描述 传送门 题目分析 这个题,求树上链的\(XOR\)最大值,可以不选某些点. 考虑到线性基可以用很快的速度求出\(XOR\)的最大值,我们首先可 ...
- [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Submit: 2131 Solved: 865 [Submit][Sta ...
- bzoj 4568: [Scoi2016]幸运数字(树上倍增+线性基)
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Submit: 1692 Solved: 643 [Submit][Sta ...
- [bzoj4568][Scoi2016]幸运数字
来自FallDream的博客,未经允许,请勿转载,谢谢. A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这 ...
- BZOJ4568 : [Scoi2016]幸运数字
树的点分治,每次求出重心后,求出重心到每个点路径上的数的线性基. 对于每个询问,只需要暴力合并两个线性基即可. 时间复杂度$O(60n\log n+60^2q)$. #include<cstdi ...
- P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)
P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...
- [洛谷P3292] [SCOI2016]幸运数字
洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...
- 【BZOJ4568】幸运数字,树链剖分/倍增+维护线性基
Time:2016.09.06 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 对于两个线性基数组a,b,直接向b中加a的元素进行线性基合并就可以了 复杂度O(P2)O(P^2)其中 ...
最新文章
- ue4蓝图节点手册中文_在UE4中播放视频
- 宏基因组合种树,2-4天领证
- linux下Redis以及phpredis扩展安装
- Ganglia 权威指南-安装Ganglia过程
- 【RN6752】模拟高清AHD芯片或成为车机新标配
- c语言输入身高计算标准体重_体质测试 | 身高 / 体重测试评分标准及方法
- tas5782m功率调试
- 永远的道长——林正英
- larval助手函数——larval中文文档
- 林俊杰的新专集太好听了...不能忍了
- 外边距与内边距的区别
- Java实习面试重点基础知识
- 毕业设计智慧停车场--车牌识别树莓派环境搭建
- macmini时间机器备份文件服务器,用普通NAS代替苹果Time Machine 功能实现MAC的时间机器...
- 计算机开机没反应怎么办,电脑开机没反应怎么办 开机没反应解决方法推荐
- 教程:Yolo5训练自己的数据集以及安装教程
- 计算机辅助训练对吞咽障碍,吞咽障碍的六大家庭训练方法
- 一文搞懂Nginx限流(简单实现)
- Twitter实时搜索系统EarlyBird
- https://www.jianshu.com/p/15c85b1901f7
热门文章
- PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
- 关于WPF的ComboBox中Items太多而导致加载过慢的问题
- 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)
- 中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
- 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...
- css 加载动画如何生效,CSS 加载动画
- 安徽全国计算机缴费,全国计算机等级考试3月报名 安徽首次网上报名缴费
- qt 显示加速_新能源 | 吉利星越ePro上市 补贴后17.58万起售 加速更快油耗更低
- c语言相邻字符串字面量,C语言预处理#运算符的细节
- snowflake mysql_snowflake数据库