题意:给一颗树,Q次询问L,L+1,L+2...R的LCA

题目传送门

以LCA为权建线段树,直接查询即可

(我用树剖找LCA)

代码:

#include<iostream>
#include<iomanip>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#define ull unsigned long long
#define ll long long
#define inf 300009
#define infm 3000009
#define INF (int) 1e9
#define rd(n) {n=0;char ch;int f=0;do{ch=getchar();if(ch=='-'){f=1;}}while(ch<'0'||ch>'9');while('0'<=ch&&ch<='9'){n=(n<<1)+(n<<3)+ch-48;ch=getchar();}if(f)n=-n;}
using namespace std;
int dep[inf],siz[inf],son[inf],top[inf],fa[inf];
int n,q;struct edge{int y,nxt;
}e[inf*2];
int head[inf],ecnt;void addedge(int x,int y){ecnt++;e[ecnt].nxt=head[x];e[ecnt].y=y;head[x]=ecnt;return;
}void dfs1(int u,int last){fa[u]=last;siz[u]=1;son[u]=-1;for (int i=head[u];i;i=e[i].nxt){int v=e[i].y;if (v!=last){dep[v]=dep[u]+1;dfs1(v,u);siz[u]+=siz[v];if (son[u]<0 || siz[v]>siz[son[u]]){son[u]=v;}}}return;
}void dfs2(int u,int tp){top[u]=tp;if (son[u]>0){dfs2(son[u],tp);}for (int i=head[u];i;i=e[i].nxt){int v=e[i].y;if (v!=fa[u] && v!=son[u]){dfs2(v,v);}}return;
}int getlca(int u,int v){while (top[u]!=top[v]){if (dep[top[u]]<dep[top[v]]){swap(u,v);}u=fa[top[u]];}if (u==v){return u;}return dep[u]>dep[v]?v:u;
}int lca[inf*4];void ST_pushup(int u){lca[u]=getlca(lca[u*2],lca[u*2+1]);//利用LCA的性质建线段树return;
}void ST_build(int u,int l,int r){if (l==r){lca[u]=l;return;} int mid=(l+r)/2;ST_build(u*2,l,mid);ST_build(u*2+1,mid+1,r);ST_pushup(u);return;
}int ST_query(int u,int l,int r,int L,int R){if (L<=l && r<=R){return lca[u];}int mid=(l+r)/2,l1=-1,l2=-1;if (L<=mid){l1=ST_query(u*2,l,mid,L,R);}if (R>mid){l2=ST_query(u*2+1,mid+1,r,L,R);}if (l1<0){return l2;}else if (l2<0){return l1;}else{return getlca(l1,l2);}
}int main(){int x,y;while (~scanf("%d",&n)){for (int i=0;i<=n;i++){head[i]=0;}ecnt=0;for (int i=1;i<n;i++){rd(x) rd(y)addedge(x,y);addedge(y,x);}dep[1]=0;dfs1(1,0);dfs2(1,1);//树剖ST_build(1,1,n);//建树rd(q);for (int i=0;i<q;i++){rd(x) rd(y)printf("%d\n",ST_query(1,1,n,x,y));}}return 0;
}

【hdu5266】pog loves szh III (LCA+线段树)相关推荐

  1. hdu 5266 pog loves szh III LCA+RMQ

    题意: 给你一棵树,然后询问l~r节点的最近公共祖先(LCA). 思路: 用RMQ维护一段区间的LCA,然后询问时,将两个区间的LCA再求一次LCA即可. code: #pragma comment( ...

  2. HDU 5266 pog loves szh III【LCA RMQ】

    B - pog loves szh III 题目:添加链接描述 题意:找出区域l到r的LCA->找l和r的LCA 分析: 链式前向星存树,先用dfs处理结点倍增关系. 然后从循环处理较深结点,直 ...

  3. HDU 5266 pog loves szh III(在线倍增LCA+ST)

    Description 给出一棵有n个节点的树,定义1为树根,有q次询问,每次询问区间[a,b]中所有节点的LCA Input 第一行为一整数n表示节点数,之后n-1行每行两个整数a和b表示树的一条边 ...

  4. HDU 5266 pog loves szh III (LAC)

    问题描述 pog在与szh玩游戏,首先pog在纸上画了一棵有根树,这里我们定义1为这棵树的根,然后szh在这棵树中选了若干个点,想让pog帮忙找找这些点的最近公共祖先在哪里,一个点为S的最近公共祖先当 ...

  5. hdu 5266 pog loves szh III

    给一棵树,q次询问,每次询问给连续的一个闭区间,问区间所有数的LCA是多少. 做一个dfs序,其中把dfs序最小的点和最大的点做一次LCA求出的点就是答案. #include <bits/std ...

  6. 【HDU】5267 pog loves szh IV【动态点分治】

    传送门:[HDU]5267 pog loves szh IV 题目分析:首先我们用树分治,对每一个分治重心,以此为根的子树,建立一棵线段树.可以发现总节点数只有$O(NlogN)$,因为每一层都是$N ...

  7. hdu 5265 pog loves szh II STL

    pog loves szh II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  8. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  9. 字符串处理 BestCoder Round #43 1001 pog loves szh I

    题目传送门 1 /* 2 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 3 */ 4 #include <cstdio&g ...

最新文章

  1. UBuntu14.04下安装和卸载Qt5.3.1
  2. 使用钩子函数[4] - 钩子链和 CallNextHookEx 的返回值
  3. 这道题你怎么看?长春理工大学2021电子竞赛
  4. LeetCode weekly contest 190 周赛
  5. c++显式加载dll并使用DLL的类
  6. GridView生成序号
  7. 苹果无线耳机使用方法_苹果官方:如果 AirPods Pro 出现这些问题,我们将免费更换!...
  8. 内是不是半包围结构_什么是自行车变速器上的“倾斜平行四边形”结构?
  9. MyCat 主键ID自增长配置
  10. 手机wap浏览器下载选哪家
  11. python中角度变弧度_Python中转换角度为弧度的radians()方法
  12. 费马定理_高数_1元微积分
  13. 天呐!java兼职接单
  14. ZY Player 2.3.5 中文版 (全网视频播放器)
  15. 小米手机权限开启方法9
  16. windows10中Office2016自定义安装、visio的安装,并安装到其他盘的方法
  17. 技术开放平台,推进开放银行布局
  18. vatic—视频标注工具安装出现error及注意事项
  19. c语言变量大全,C语言变量
  20. jQuery - 元素遍历

热门文章

  1. python----异常的概念和使用
  2. 关于网站证书布置了但是还是显示不安全
  3. 毕业设计 基于JAVA的私人牙科诊所管理系统
  4. 开发技术前线 第六期
  5. golang的int64排序_go语言中的排序讲解
  6. 取消chrome打印预览流程
  7. Java就业面试题大全
  8. 自学算法,我是如何从小白到拿到大厂offer的
  9. Django保姆级简易项目
  10. 日语蔬菜水果相关词汇(3)