博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板——倍增LCA
阅读量:4667 次
发布时间:2019-06-09

本文共 936 字,大约阅读时间需要 3 分钟。

n个节点,m个询问,root为根节点,fa[i][j]表示i的第2j个祖先

#include
using namespace std;const int P=30;//vector son[500001];//若清楚每条边哪个是父节点那个是子节点,可以用vector,son[i]表示以i为父节点的子节点;int n,m,deep[500001],fa[500001][30]={0},root,jump[500005],num=0;bool judge[500005]={0};struct nob{ int sta,ed,jump;}a[1000005];//邻接表存储边void add(int sta,int ed){ num++; a[num].sta=sta; a[num].ed=ed; a[num].jump=jump[sta]; jump[sta]=num;}void dfs(int pos){ judge[pos]=1; for (int i=jump[pos]; i>0; i=a[i].jump){ if (judge[a[i].ed]) continue; deep[a[i].ed]=deep[pos]+1; fa[a[i].ed][0]=pos; dfs(a[i].ed); }}void beizeng(){ for (int i=1; i
deep[x]) swap(x,y); int s=deep[x]-deep[y]; for (int i=0; i
=0; i--){ if (fa[x][i]!=fa[y][i]){ x=fa[x][i]; y=fa[y][i]; } } return fa[x][0];}int main(){ scanf("%d%d%d",&n,&m,&root); //若没有说明根节点的话,那么fa[i][0]==0的为根节点 for (int i=1,x,y; i

转载于:https://www.cnblogs.com/cain-/p/7711559.html

你可能感兴趣的文章
在Windows Server通过MMC导入客户证书的注意事项
查看>>
设计模式之“单例模式”
查看>>
iOS App上架流程(2016详细版)
查看>>
SpringMVC+Thymeleaf +HTML的简单框架
查看>>
mxnet系列 安装
查看>>
Flask - 基础
查看>>
导航栏主题
查看>>
堆排序
查看>>
Expm 1_2 实现快速排序的算法,并尝试采用不同的方法实现线性的划分过程.
查看>>
Spoon新建repository的时候
查看>>
Oracle XE http端口8080的修改
查看>>
C#中,将16进制转换为有符号的10进制的方法(支持带0x标志,支持任意字符串)
查看>>
HTML5开发 Web SQL Database 本地数据库
查看>>
数据库镜像搭建
查看>>
python实现句子反转
查看>>
Django------多表操作
查看>>
java入门之内部类
查看>>
c之枚举默认值
查看>>
设计模式之 --- 工厂模式(下)
查看>>
Linux常用命令大全
查看>>