题目大意:

题目链接:https://jzoj.net/senior/#main/show/3054
给出一棵有根树,询问xxx和yyy的祖孙关系。


思路:

水题。
直接求一遍lcalcalca,然后如果lcalcalca是xxx或yyy中的一个,那么xxx和yyy就是有祖孙关系的,否则就没有祖孙关系。


代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N=40010;
const int LG=20;
int n,m,x,y,tot,root,head[N],f[N][LG+1],dep[N];struct edge
{int next,to;
}e[N*2];void add(int from,int to)
{e[++tot].to=to;e[tot].next=head[from];head[from]=tot;
}void dfs(int x,int fa)
{dep[x]=dep[fa]+1;f[x][0]=fa;for (int i=1;i<=LG;i++)f[x][i]=f[f[x][i-1]][i-1];for (int i=head[x];~i;i=e[i].next){int v=e[i].to;if (v!=fa) dfs(v,x);}
}int lca(int x,int y)
{if (dep[x]<dep[y]) swap(x,y);for (int i=LG;i>=0;i--)if (dep[f[x][i]]>=dep[y]) x=f[x][i];if (x==y) return x;for (int i=LG;i>=0;i--)if (f[x][i]!=f[y][i]){x=f[x][i];y=f[y][i];}return f[x][0];
}int main()
{memset(head,-1,sizeof(head));scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d",&x,&y);if (y==-1) root=x;else{add(x,y);add(y,x);}}dfs(root,0);scanf("%d",&m);while (m--){scanf("%d%d",&x,&y);int LCA=lca(x,y);if (LCA==x) printf("1\n");else if (LCA==y) printf("2\n");else printf("0\n");}return 0;
}

【JZOJ3054】祖孙询问【LCA】相关推荐

  1. 祖孙询问(LCA+倍增思想)

    1. 问题描述: 给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n.有 m 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x 与 y 的祖孙关系. 输入格式 输入第 ...

  2. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

  3. loj10135. 「一本通 4.4 练习 2」祖孙询问

    思路: 在LCA函数中如果将x与y放置到同一深度时,若x==y则x与y有祖宗关系且deep较小的为祖宗,否则无祖宗关系 #include<cstdio> #include<iostr ...

  4. 欢乐纪中B组周五模拟赛【2019.3.8】

    前言 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 222 2017myself2 ...

  5. 【图论】—— 最近公共祖先(LCA)

    给定一颗树,若节点 z 既是 节点 x 的祖先, 也是节点 y 的祖先,那么称 z 为 x.y 的公共祖先. 在 x.y 的所有公共祖先中,深度最大的一个称为 x.y 的最近公共祖先, 也称 LCA( ...

  6. jzoj3626-[LNOI2014]LCA【树链剖分,线段树】

    正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3626 题目大意 一棵树,每次给出(l,r,z)(l,r,z)(l,r,z)询问∑i ...

  7. 最近公共祖先(LCA)Tarjan

    P3379 [模板]最近公共祖先(LCA) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1.Tarjan 观察这样一棵树,假设要求LCA(3,4),根据dfs我们会先向下搜索 我 ...

  8. AcWing算法提高课 Level-3 第三章 图论

    单源最短路的建图方式 1129. 热浪 思路 :单源最短路算法中除了bellmanford一般不用以外,普D为O(n2)O(n^2)O(n2),优D为O(m∗logn)O(m*logn)O(m∗log ...

  9. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

最新文章

  1. 集成公司内部的多个子系统(兼容B/S和C/S),实现单点登录功能的多系统的统一入口功能...
  2. SpringMVC-注解@RequestParam
  3. 找不到_我的圣诞礼物找不到了!
  4. oracle开审计记录变动的表,Oracle未开启审计情况下追踪表变更记录
  5. OSI强调:SSPL并不是开源许可证
  6. Linux下查看文件和文件夹大小的df和du命令(链接)
  7. php扩展包安装了为啥没加载,已安装PHP扩展但未加载
  8. C++——多进程并发与多线程并发
  9. 微信小程序-通知滚动小提示
  10. 下个月计划【2009-5】
  11. Cover V2将启用两条产品线 本周开始进行V2 UI开发
  12. [Android 新特性] 有史来最大改变 Android 5.0十大新特性
  13. pytorch可视化
  14. SpringBoot+Vue项目校园运动会管理系统
  15. VMware 和 linux镜像文件
  16. 1、登录模块测试用例
  17. GCC与交叉编译器(概念)
  18. Fedora 9 NFS配置
  19. Java项目:springboot宠物医院管理系统
  20. 容联七陌×惠州燃气丨用服务之光,点燃美好生活

热门文章

  1. 龙芯平台下调试蜂鸣器
  2. hdu4514 并查集+树直径
  3. 生活流水账(转载老婆的文章)
  4. 在中央电视台元旦晚会上倒数过新年
  5. 2019腾讯产品策划/运营暑期实习生提前批凉凉面经
  6. “COMSOL Multiphysics多物理场仿真技术与应用”光电专题(二十九期)
  7. Naver 向沙特 NEOM 项目推销充满机器人的智能办公室
  8. 小虎电商浏览器:淘数据聚划算功能有什么用?
  9. 《the culture code》
  10. 最为精细的全球海岸线