每日一题 day44 打卡

Analysis

首先有一个结论:先找 p1=(a,b),p2=(c,d) 的LCA的深度,在与(a,c),(a,d),(b,c),(b,d)中最深的LCA n的深度比较,如果 n <=p1 & n<=p2 说明两条路径相交(即满足题目要求)。

假设 (b,c) 是最深的LCA n,  p1=dep[LCA(a,b)] .

且 n>=p1.

因为是树,所以每个点走到其LCA的路径只有一条。

也就是说,n点在b到p1的路径上,即两条路径相交

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. #define maxn 100000+10
  7. #define rep(i,s,e) for(register int i=s;i<=e;++i)
  8. #define dwn(i,s,e) for(register int i=s;i>=e;--i)
  9. using namespace std;
  10. inline int read()
  11. {
  12. int x=,f=;
  13. char c=getchar();
  14. while(c<''||c>'') {if(c=='-') f=-; c=getchar();}
  15. while(c>=''&&c<='') {x=x*+c-''; c=getchar();}
  16. return f*x;
  17. }
  18. inline void write(int x)
  19. {
  20. if(x<) {putchar('-'); x=-x;}
  21. if(x>) write(x/);
  22. putchar(x%+'');
  23. }
  24. int n,q,cnt;
  25. int dep[maxn],dp[maxn][+];
  26. int head[*maxn];
  27. struct node
  28. {
  29. int v,nex;
  30. }edge[*maxn];
  31. inline int max_four(int a1,int a2,int a3,int a4)
  32. {
  33. return max(max(a1,a2),max(a3,a4));
  34. }
  35. inline void add(int x,int y)
  36. {
  37. edge[++cnt].v=y;
  38. edge[cnt].nex=head[x];
  39. head[x]=cnt;
  40. }
  41. void init(int from,int father)
  42. {
  43. dep[from]=dep[father]+;
  44. rep(i,,) dp[from][i]=dp[dp[from][i-]][i-];
  45. for(int i=head[from];i;i=edge[i].nex)
  46. {
  47. int to=edge[i].v;
  48. if(to==father) continue;
  49. dp[to][]=from;
  50. init(to,from);
  51. }
  52. }
  53. int LCA(int x,int y)
  54. {
  55. if(dep[x]<dep[y]) swap(x,y);
  56. dwn(i,,)
  57. {
  58. if(dep[dp[x][i]]>=dep[y])
  59. x=dp[x][i];
  60. if(x==y) return x;
  61. }
  62. dwn(i,,)
  63. {
  64. if(dp[x][i]!=dp[y][i])
  65. {
  66. x=dp[x][i];
  67. y=dp[y][i];
  68. }
  69. }
  70. return dp[x][];
  71. }
  72. signed main()
  73. {
  74. n=read();q=read();
  75. rep(i,,n-)
  76. {
  77. int x=read(),y=read();
  78. add(x,y);
  79. add(y,x);
  80. }
  81. init(,);
  82. rep(i,,q)
  83. {
  84. int a=read(),b=read(),c=read(),d=read();
  85. int p1=dep[LCA(a,b)],p2=dep[LCA(c,d)];
  86. int n1=LCA(a,c),n2=LCA(a,d),n3=LCA(b,c),n4=LCA(b,d);
  87. int com=max_four(dep[n1],dep[n2],dep[n3],dep[n4]);
  88. if(p1<=com&&p2<=com) printf("Y\n");
  89. else printf("N\n");
  90. }
  91. return ;
  92. }

请各位大佬斧正(反正我不认识斧正是什么意思)

洛谷 P3398 仓鼠找sugar 题解的更多相关文章

  1. 洛谷 P3398 仓鼠找sugar 解题报告

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  2. 洛谷P3398 仓鼠找sugar [LCA]

    题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  3. 洛谷p3398仓鼠找suger题解

    我现在爱死树链剖分了 题目 具体分析的话在洛谷blog里 这里只是想放一下改完之后的代码 多了一个son数组少了一个for 少了找size最大的儿子的for #include <cstdio&g ...

  4. 洛谷P3398 仓鼠找sugar

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  5. 洛谷——P3398 仓鼠找sugar

    https://www.luogu.org/problem/show?pid=3398#sub 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴 ...

  6. 洛谷 P3398 仓鼠找sugar —— 树链剖分

    题目:https://www.luogu.org/problemnew/show/P3398 树链剖分一下,路径就变成线段树上的几个区间: 两条路径相交就是线段树上有区间相交,所以在相应位置打个标记, ...

  7. 洛谷 [P3398] 仓鼠找sugar

    树剖求LCA 我们可以发现,两条路径ab,cd相交,当且仅当 dep[lca(a,b)]>=dep[lca(c,d)]&(lca(lca(a,b),c)==lca(a,b)||lca(l ...

  8. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  9. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是“判有交,此链有彼祖”.即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca, ...

随机推荐

  1. 深度学习-DCGAN论文的理解笔记

    训练方法DCGAN 的训练方法跟GAN 是一样的,分为以下三步: (1)for k steps:训练D 让式子[logD(x) + log(1 - D(G(z)) (G keeps still)]的值 ...

  2. rancher部署kubernets集群

    docker的安装 先添加docker源 sudo apt update sudo apt install docker.io docker更换国内镜像 1.配置脚本如下: #!/bin/bashca ...

  3. Linux新装系统简单指南

    也许更好的阅读体验 换源 1. 备份原来的源 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 2.更换源 先用\(gedit\)打开文 ...

  4. Django开发简单博客流程

    什么是Django? Django是一个基于python的高级web开发框架 它能够让开发人员进行高效且快速的开发 高度集成(不用自己造轮子), 免费并且开源 当前路径创建工程 django-admi ...

  5. nacos初探--作为配置中心

    什么是nacos Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心).动态配置服务(可以做配置中心).动态 DNS 服务. 官方介绍是这样的: Nac ...

  6. JDK8源码解析 --- Long 类型

    最近都在看JDK8的源码,想把记录下来与大家一起共享,每天 积累一点,每天成长一点.看了装箱Long类型,有好多以前没有注意到或者不知道的内容,慢慢懂得.废话不多说,直接上代码讲解... 1.缓存区L ...

  7. K8S 中的容器编排和应用编排

    众所周知,Kubernetes 是一个容器编排平台,它有非常丰富的原始的 API 来支持容器编排,但是对于用户来说更加关心的是一个应用的编排,包含多容器和服务的组合,管理它们之间的依赖关系,以及如何管 ...

  8. P2801 教主的魔法 (线段树)

    题目 P2801 教主的魔法 解析 成天做水题 线段树,第一问区间加很简单 第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0 ps:求教 ...

  9. sdcard不可执行.

    Possibly you placed it on your sdcard -- which is mounted with the noexec flag. You either need to m ...

  10. QueryDSL-JPA

    QueryDSL-JPA QueryDSL简介 官网 1 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询. 2 Querydsl可以通过一组通用的查询AP ...