最低公共祖先java_满族的祖先是

最低公共祖先java_满族的祖先是原题链接题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 MM 行每行包含两个正整数 a, ba,b,表示询问 aa 结点和 bb 结点的最近公共祖先。输出格式输出包含 MM 行,每行包含一个正整数,依次为每一个询问的结果。输入

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接

题目描述
如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。

输入格式
第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。

接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。

接下来 MM 行每行包含两个正整数 a, ba,b,表示询问 aa 结点和 bb 结点的最近公共祖先。

输出格式
输出包含 MM 行,每行包含一个正整数,依次为每一个询问的结果。

输入输出样例
输入

5 5 4
3 1
2 4
5 1
1 4
2 4
3 2
3 5
1 2
4 5

输出

4
4
1
4
4

题解
Tarjan离线求lca

#include<bits/stdc++.h>
#define x first
#define y second
#define send string::npos
#define lowbit(x) (x&(-x))
#define left(x) x<<1
#define right(x) x<<1|1
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef struct Node * pnode;
const int N = 5e5 + 10;
const int M = 3 * N;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int Mod = 1e9;
vector<PII>query[N];
int fa[N],vis[N],res[N];
int head[N],cnt;
struct Edge{ 

int v,next;
}edge[M];
void add(int u,int v){ 

edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt ++;
}
void init(){ 

for(int i = 0;i < N;i ++)fa[i] = i;
}
int Find(int x){ 

return fa[x] = (fa[x] == x ? x : Find(fa[x]));
}
void Tarjan(int u,int f){ 

vis[u] = true;
for(auto &q : query[u]){ 

int y = q.x,id = q.y;
if(vis[y])res[id] = Find(y);    //如果之前遍历过另一个节点
}
for(int i = head[u];~i;i = edge[i].next){ 

int ver = edge[i].v;
if(ver == f)continue;
Tarjan(ver,u);
fa[ver] = u;
}
}
int main(){ 

memset(head,-1,sizeof head);
init();
int n,m,root,x,y;
cin>>n>>m>>root;
for(int i = 0;i < n - 1;i ++){ 

cin>>x>>y;
add(x,y);
add(y,x);
}
for(int i = 0;i < m;i ++){ 

cin>>x>>y;
query[x].push_back({ 
y,i});
query[y].push_back({ 
x,i});
}
Tarjan(root,-1);
for(int i = 0;i < m;i ++)cout<<res[i]<<endl;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168770.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • sas ods html的作用是什么意思,SAS ODS「建议收藏」

    sas ods html的作用是什么意思,SAS ODS「建议收藏」SAS程序的输出可以转换为更加用户友好的形式,如.html或PDF。这是通过使用SAS中提供的ODS语句来完成的。ODS代表输出传递系统。它主要用于格式化SAS程序的输出数据到好的报告,这是很好看的和理解。这也有助于与其他平台和软件共享输出。它还可以将多个PROC语句的结果合并在一个文件中。语法在SAS中使用ODS语句的基本语法是:ODSoutputtypePATHpathname…

  • 网络安全自学笔记(网络安全笔记300字)

    目录WEB(应用)安全前端安全xss攻击后端安全文件上传漏洞WebShell解析安全数据安全sql注入通信安全WEB(应用)安全前端安全xss攻击后端安全文件上传漏洞WebShell解析安全数据安全sql注入网络安全-sqlmap学习笔记通信安全网络-http协议学习笔记(消息结构、请求方法、状态码等)…

  • pytest的assert_assert断言语句

    pytest的assert_assert断言语句前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

  • TCP Flags标志位介绍[通俗易懂]

    TCP Flags标志位介绍[通俗易懂]传输控制协议(TransmissionControlProtocol,TCP)是一种传输层协议。TCP使数据包从源到目的地的传输更加顺畅。它是一种面向连接的端到端协议。每个数据包由TCP包裹在一个报头中,该报头由10个强制字段共20个字节和一个0到40字节的可选数据字段组成。如下图所示:来自于https://www.geeksforgeeks.org1.源端口号(SourcePort):16bits,该字段标识发送方应用程序的端口号。2.目…

  • Java设计模式之模板方法模式(Template Method)

    本文属于23种设计模式系列,介绍的是模板方法模式。

  • awk的内置函数_awk引用变量

    awk的内置函数_awk引用变量awk 系列Part10:如何使用 awk 内置变量

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号