BZOJ4568-[Scoi2016]幸运数字
在树上路径(u,v)之间选择一些点的权值,使异或和最大
题解
对于树上的每一个点,维护log(n)个线性基,L[u][i]表示从它自身到它上跳$2^i$倍祖先的线性基,在对LCA做预处理的时候预处理出单个节点的倍增线性基。查询LCA时每次上跳都对答案插入当前节点上跳$2^i$倍的线性基,最后要单独插入点$a[v]$的值。
代码
1 |
|
BZOJ4568-[Scoi2016]幸运数字
在树上路径(u,v)之间选择一些点的权值,使异或和最大
对于树上的每一个点,维护log(n)个线性基,L[u][i]表示从它自身到它上跳$2^i$倍祖先的线性基,在对LCA做预处理的时候预处理出单个节点的倍增线性基。查询LCA时每次上跳都对答案插入当前节点上跳$2^i$倍的线性基,最后要单独插入点$a[v]$的值。
1 | #include <bits/stdc++.h> |