「4.4」祖孙询问

ops/2024/10/20 10:23:47/

 

「4.4」祖孙询问

题目描述

已知一棵 n 个节点的有根树。有 m 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x 与 y 的祖孙关系。

输入格式

输入第一行包括一个整数 n 表示节点个数;
接下来 n 行每行一对整数对 a 和 b 表示 a 和 b 之间有连边。如果 b 是 -1,那么 a 就是树的根;
第 n+2 行是一个整数 m 表示询问个数;
接下来 m 行,每行两个正整数 x 和 y,表示一个询问。

输出格式

对于每一个询问,若 x 是 y 的祖先则输出 1,若 y 是 x 的祖先则输出 2,否则输出 0。

样例输入1

10
234 -1
12 234
13 234
14 234
15 234
16 234
17 234
18 234
19 234
233 19
5
234 233
233 12
233 13
233 15
233 19

样例输出1

1
0
0
0
2

注释说明

对于 30% 的数据,1≤n,m≤10^3;
对于 100% 的数据,1≤n,m≤4×10^4,每个节点的编号都不超过 4×10^4。

#include<bits/stdc++.h>
using namespace std;
const int N=4e5+5;
int n,pre[N],f[N][17],dep[N],k,lg[N];
struct node{int to,next;
}e[N*2];
void add(int u,int v){e[++k]=(node){v,pre[u]};pre[u]=k;
}
void dfs(int x,int fa){f[x][0]=fa;dep[x]=dep[fa]+1;for(int i=pre[x];i!=0;i=e[i].next){int to=e[i].to;if(to==fa)continue;dfs(to,x);}
}
int lca(int x,int y){if(dep[x]<dep[y])swap(x,y);while(dep[x]>dep[y])x=f[x][lg[dep[x]-dep[y]]];if(x==y)return x;for(int i=16;i>=0;i--){if(f[x][i]!=f[y][i]){//printf("(%d,%d)",f[x][i],f[y][i]);x=f[x][i];y=f[y][i];}}return f[x][0];
}
int main(){scanf("%d",&n);int rt,x,y;for(int i=1;i<=n;i++){scanf("%d%d",&x,&y);if(y==-1){rt=x;continue;}add(x,y);add(y,x);}dfs(rt,0);for(int i=2;i<=N;i++)lg[i]=lg[i/2]+1;for(int j=1;j<=16;j++){for(int i=1;i<=N;i++){f[i][j]=f[f[i][j-1]][j-1];}}int m;scanf("%d",&m);while(m--){scanf("%d%d",&x,&y);int lc=lca(x,y);//printf("%d\n",lc);if(lc==x)puts("1");else if(lc==y)puts("2");else puts("0");}
}
/*
10
234 -1
12 234
13 234
14 234
15 234
16 234
17 234
18 234
19 234
233 19
5
234 234
234 17
233 13
233 15
233 19
*/


http://www.ppmy.cn/ops/126956.html

相关文章

TCP 全连接队列与 tcpdump 抓包

TCP 相关实验 理解 listen 的第二个参数 基于刚才封装的 TcpSocket 实现以下测试代码对于服务器, listen 的第二个参数设置为 1, 并且不调用 accept test_server.cc C #include "tcp_socket.hpp" int main(int argc, char* argv[]) {if (argc ! 3) {printf("…

在线绘图工具drawio,visio的平替

Draw.io&#xff1a;灵活高效的在线绘图工具推荐 在工作和项目管理中&#xff0c;流程图、架构图和思维导图等可视化图表是非常重要的沟通工具。Draw.io&#xff08;现更名为diagrams.net&#xff09;是一个强大且免费的在线绘图工具&#xff0c;适用于创建各种类型的图表。它功…

Debug-029-el-table实现自动滚动分批请求数据

前情提要 最近做了一个小优化&#xff0c;还是关于展示大屏方面的。大屏中使用el-table展示列表数据&#xff0c;最初的方案是将数据全部返回&#xff0c;确实随着数据变多有性能问题&#xff0c;有时请求时间比较长。这里做的优化就是实现列表的滚动到距离底部一定高度时再次请…

如何使用Websocket订阅实时股票价格

WebSocket和HTTP请求在工作原理和使用场景上存在显著区别。首先&#xff0c;HTTP是一种无状态的协议&#xff0c;客户端发起请求&#xff0c;服务器响应后&#xff0c;连接通常会关闭。如果客户端需要再次获取数据&#xff0c;必须发起新的请求。这种"请求-响应"模型…

【火山引擎】 Chat实践 | 大模型调用实践 | python

目录 一 前期工作 二 Doubao-pro-4k_test实践 一 前期工作 1 已在火山方舟控制台在线推理页面创建了推理接入点 ,接入大语言模型并获取接入点 ID。 2 已参考安装与初始化中的步骤完成 SDK 安装和访问凭证配置

vue综合指南(一)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:Vue-综合指南 目录 1、你知道Vue响应式数据原理吗&#xff1f;Proxy 与 Object.defineProperty 优…

Cesium for UE-04-一些说明

目前主要做webgis的工作&#xff0c;UE官方对web的支持截止到了4.23版本&#xff0c;即使是4.23版本之后的4.xx版本也有办法支持&#xff0c;已经有大佬开源了一些方法和工具&#xff0c;不再介绍。即使是4.23想要输出为h5&#xff0c;也是有一定的折腾门槛的。最重要的是【Ces…

数据结构编程实践20讲(Python版)—15完全图

本文目录 15 完全图(Complete Graph)S1 说明特点可以解决的问题S2 示例S3 问题1:旅行商问题(TSP)S4 问题2:任务分配问题往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段树12 树状数组13 图形数据结构14 邻接矩阵15 完全…