Xor Path 牛客,HPU--C--LCA
题解:
题目要求求出u和v两点在最短路径上的异或和。怎么确定最短路径呢?,就是U到LCA(u,v)的路径加上V到LCA(u,v)。根据异或的性质,如k^a^a=k,即异或一个值两边等于原数值。
所以维护一个数组dp[i]指的是根节点s到点i的异或和,所以答案应该是dp[u]^dp[v]^dp[lca[u,v]]^arr[lca[u,v]]其中arr是每个点的weight.
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1E5+;
vector<ll >ve[N];
ll arr[N];
bool pre[N];
ll fa[N];
ll dp[N];
ll bits[N];
ll depth[N];
ll father[N][];
void dfs1(ll x,ll y){//y是x的父亲
fa[x]=y;
dp[x]=dp[y]^arr[x];
for(ll i=;i<ve[x].size();i++){
ll c=ve[x][i];
if(c!=y) {
dfs1(c,x);
}
}
}
void bt()
{
bits[]=;
for(ll i=;i<=;i++) bits[i]=bits[i-]<<;
}
void dfs(ll x,ll y){//x是y的儿子节点
depth[x]=depth[y]+;
father[x][]=y;
for(ll i=;i<=;i++) father[x][i]=father[father[x][i-]][i-];
for(ll i=;i<ve[x].size();i++){
ll c=ve[x][i];
if(c!=y) {
dfs(c,x);
}
}
}
ll lca(ll x,ll y){//设x比y深
if(depth[x]<depth[y]) swap(x,y);
ll dif=depth[x]-depth[y];
for(ll i=;i>=;i--){
if(bits[i]<=dif){
dif-=bits[i];
x=father[x][i];
}
}
if(x==y) return x;
for(ll i=;i>=;i--){
if(depth[x]>=bits[i]&&father[x][i]!=father[y][i]){
x=father[x][i];
y=father[y][i];
}
}
return father[x][]; }
int main(){
ll n;
cin>>n;
for(ll i=;i<=n;i++) cin>>arr[i];
ll x,y;
for(ll i=;i<n;i++){
cin>>x>>y;
pre[y]=;
ve[x].push_back(y);
ve[y].push_back(x);
}
bt();
dfs1(,);
dfs(,);
ll q;
cin>>q;
for(ll i=;i<=q;i++){
ll x,y;
cin>>x>>y;
ll k=dp[x]^dp[y];
ll a=lca(x,y);
k=k^arr[a];
cout<<k<<endl;
}
return ;
}
Xor Path 牛客,HPU--C--LCA的更多相关文章
- 牛客网 272B Xor Path(树上操作)
题目链接:Xor Path 题意:每个顶点的点权为Ai,任意两点路径上点权异或和为Path(i,j),求所有Path(i,j)和. 题解:考虑每个顶点被用到的次数,分以下三种情况: 1.本身和其他顶点 ...
- 牛客练习赛32 B题 Xor Path
链接:https://ac.nowcoder.com/acm/contest/272/B来源:牛客网 题目描述 给定一棵n个点的树,每个点有权值.定义表示 到 的最短路径上,所有点的点权异或和. ...
- 牛客小白月赛13 小A的最短路(lca+RMQ)
链接:https://ac.nowcoder.com/acm/contest/549/F来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一个 ...
- 【牛客OI赛制测试赛3】 毒瘤xor
牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long lo ...
- 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 D.寻找-树上LCA(树上a到b的路径上离c最近的点)
链接:https://ac.nowcoder.com/acm/contest/558/D来源:牛客网 寻找 小猫在研究树. 小猫在研究树上的距离. 给定一棵N个点的树,每条边边权为1. Q次询问,每次 ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 牛客网训练赛26D(xor)
题目链接:https://www.nowcoder.com/acm/contest/180/D 线性基的学习:https://www.cnblogs.com/vb4896/p/6149022.html ...
- 牛客NOIP暑期七天营-TG1 赛后题解
目录 牛客NOIP暑期七天营-提高组1 A-最短路 题目描述 link 题解 代码 B-最小生成链 题目描述 link 题解 代码 C-最小字典最短路 题目描述 link 题解 Update 牛客NO ...
- 牛客暑期ACM多校 第七场
链接:https://www.nowcoder.com/acm/contest/145/C来源:牛客网 C .题目描述 A binary string s of length N = 2n is gi ...
随机推荐
- c语言课程设计--图书/音乐管理系统
这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 只能提供一个思 ...
- Oracle数据库开机自启动的配置
如果服务器断电重启或计划内重启,在服务器的操作系统启动后,需要手工启动数据库实例和监听,本文介绍如何把Oracle数据库的启动和关闭配置成系统服务,在操作系统启动/关闭时,自动启动/关闭Oracle实 ...
- 关于js中iframe 中 location.href的用法
关于js中"window.location.href"."location.href"."parent.location.href".&qu ...
- 一文总结数据科学家常用的Python库(下)
用于建模的Python库 我们已经到达了本文最受期待的部分 - 构建模型!这就是我们大多数人首先进入数据科学领域的原因,不是吗? 让我们通过这三个Python库探索模型构建. Scikit-learn ...
- 重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
近日,知名开源社区Github上有个名为DSFD(Dual Shot Face Detector)的算法引起了业内关注,它正是来自于腾讯优图.目前,该算法已经被计算机视觉顶级会议CVPR 2019接收 ...
- 干净直接安装+PS下载
PS CS6 https://www.cr173.com/soft/247727.html 直接一键安装,很方便干净. 不要去华军软件下,广告浪费时间. 链接:https://pan.baidu.co ...
- 自签SSL证书
0.介绍 自己开发的使用了SSL协议的软件,通常没必要从证书签发机构那里来获取证书,自签证书成了必要的选择.自签证书还可以用来实现客户端登录认证. 1.创建CA 创建CA的私钥 openssl gen ...
- VRRP协议:Virtual Route
VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议.是一种容错协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而 ...
- Python python 五种数据类型--字典
# 定义一个字典 var1 = {'a':20,'b':40}; var2 = dict(); print(type(var1)) print(type(var2)) # 长度 length = le ...
- redis++:Redis持久化 rdb & aof 工作原理及流程图 (三)
RDB的原理: 在Redis中RDB持久化的触发分为两种:自己手动触发与Redis定时触发. 针对RDB方式的持久化,手动触发可以使用: 1):save:会阻塞当前Redis服务器,直到持久化完成,线 ...