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 ...
随机推荐
- 两片74门实现的双边沿D触发器
最近一个项目需要时钟上升沿和下降沿都可以触发的D触发器,但并没有找到符合要求的商品IC.也去看了一些文献,但都是给的示意图然后用分立元件实现的(应该是准备做成IC).这里给出一种最少2个IC就能搭出来 ...
- 补充《解析“60k”大佬的19道C#面试题(上)》
[广州.NET技术俱乐部]微信群的周杰写了一篇文章<解析“60k”大佬的19道C#面试题(上)>https://www.cnblogs.com/sdflysha/p/20200325-19 ...
- Webpack抽离第三方类库以及common解决方案
前端构建场景有两种,一种是单页面构建,另一种是多入口构建多页面应用程序(我视野比较小,目前就知道这两种),下面我们针对这两种场景总结了几种抽离第三方类库以及公共文件的解决方案. 如果有哪些地方优化不周 ...
- C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...
- 给社团同学做的R语言爬虫分享
大家好,给大家做一个关于R语言爬虫的分享,很荣幸也有些惭愧,因为我是一个编程菜鸟,社团里有很多优秀的同学经验比我要丰富的多,这次分享是很初级的,适用于没有接触过爬虫且有一些编程基础的同学,内容主要有以 ...
- 全屏banner及全屏轮播
一.全屏banner 1.设置网页图片全屏banner <!DOCTYPE html> <html lang="en"> <head> < ...
- 配置centOS下的Python
Linux下Python版本升级: 1. 首先确认Linux操作系统中自带的python 版本时候与自己所需要的版本一致 所有的python版本都在https://www.python.org/ftp ...
- Mac下安装安装selenium与安装chromedriver安装
开发环境:MacOS,Python3.7 1. 安装selenium 可以使用pip安装(pip install selenium)或者使用pycharm进行安装下载 2. 运行如下代码: from ...
- Django安装和使用
Django安装 安装Django Python3在线安装Django pip3 install Django 验证是否安装成功,并查看当前版本 python -m django --version ...
- gold 30min