最低公共祖先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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年8月8日 下午1:16
下一篇 2022年8月8日 下午1:16


相关推荐

  • bat命令 延迟执行

    bat命令 延迟执行1 使用 WScirpt 的 sleep 功能 精度 0 001 秒创建 vbs 延迟文件 然后在批处理文件中调用 使用 WScript 的 sleep 函数 实现 sleep 的效果 实战 1 创建文件 sleep vbs sleep vbs 内容如下 WScript sleep5000 2 调用 vbsstart waitsleep vbs1 使用 choice 命令 choice t10 cyn n dn m 10 秒后打开 CHOICE Cchoices

    2025年12月7日
    9
  • MySQL锁详解

    MySQL锁详解根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类一、全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句全局锁的…

    2022年4月30日
    47
  • Pycharm远程代码调试

    Pycharm远程代码调试Pycharm 远程代码调试前言一般代码本地调试完成后 需要运行到服务器上 比如自动化测试脚本 爬虫脚本等 所以第一步需要将项目上传到服务器 然后在服务器上进行调试和运行 但是需要长期维护和开发的项目 这样就繁琐了很多 其实 Pycharm 即可实现远程调试功能 具体配置步骤在顶部菜单中选择 Tools gt Deployment gt Configuratio 在弹出的窗口中 点击左上角 号 选择 STFP 填写服务器名称后 点击 OK 在 connection 窗口填写服务器 IP Host

    2026年3月27日
    2
  • 去除限制 Post 请求大小限制

    去除限制 Post 请求大小限制tomcat6及以下版本 在tomcat文件夹下的conf文件中的server.xml配置中添加: maxPostSize=”0″//0表示不限制大小。tomcat7及以上版本​ 在tomcat文件夹下的conf文件中的server.xml配置中添加:​ maxPostSize=”-1″//-1表示不限制大小。​ maxPostSiz…

    2022年7月18日
    22
  • 商城-文档_文档中心

    商城-文档_文档中心谷粒商城文档

    2022年8月30日
    3
  • MySql的root密码忘记该怎么找回

    MySql的root密码忘记该怎么找回Windows下如果MySQL密码忘记了root密码导致无法登录,如下图所示,这个时候怎么办,只能重置root密码了。1.打开任务管理器查看MySql服务是否启动,如果已启动则先将其停止2.找到MySql目录下的my.ini文件3.打开该文件,找到里面的[mysqld],然后在这个下面添加skip-grant-tables,添加完后保存文件4.重新进到任务管理器将…

    2022年6月17日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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