https://www.luogu.org/problemnew/show/P3398

题意:一颗$n$个点的树,$q$次询问两条链$(a,b),(c,d)$是否有交


树剖裸题orz

一开始的想法是求出$lca_1=lca(a,b),lca_2=lca(c,d)$,对于深度大的那个$lca$用dfs序判断是否在另一条链上,然后到现在都不知道为什么一直wa…

改成判断深度大的那个$lca$是否和另外两个点的其中某个点有父子关系好像就行了…

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int N=100005;
  6. inline int read()
  7. {
  8. int s=0,f=1;char c=getchar();
  9. while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
  10. while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
  11. return s*f;
  12. }
  13. struct edge
  14. {
  15. int to,nxt;
  16. }edges[N<<1];
  17. int n,q,tot,cnt;
  18. int head[N<<1],size[N],son[N],dep[N],top[N],fa[N],tim[N];
  19.  
  20. inline void addEdge(int u,int v)
  21. {
  22. edges[++cnt]=(edge){v,head[u]};
  23. head[u]=cnt;
  24. }
  25.  
  26. #define cur edges[i].to
  27.  
  28. inline void dfs1(int x)
  29. {
  30. size[x]=1;
  31. for(register int i=head[x];i;i=edges[i].nxt)
  32. if(cur!=fa[x])
  33. {
  34. fa[cur]=x;dep[cur]=dep[x]+1;
  35. dfs1(cur);size[x]+=size[cur];
  36. if(size[son[x]]<size[cur])son[x]=cur;
  37. }
  38. }
  39.  
  40. inline void dfs2(int x,int t)
  41. {
  42. top[x]=t;tim[x]=++tot;
  43. if(son[x])dfs2(son[x],t);
  44. for(register int i=head[x];i;i=edges[i].nxt)
  45. if(cur!=son[x]&&cur!=fa[x])dfs2(cur,cur);
  46. }
  47.  
  48. #undef cur
  49.  
  50. inline int lca(int a,int b)
  51. {
  52. while(top[a]!=top[b])
  53. {
  54. if(dep[top[a]]<dep[top[b]])swap(a,b);
  55. a=fa[top[a]];
  56. }
  57. if(dep[a]>dep[b])swap(a,b);
  58. return a;
  59. }
  60.  
  61. int main()
  62. {
  63. n=read();q=read();
  64. for(register int i=1;i<n;i++)
  65. {
  66. int u,v;u=read();v=read();
  67. addEdge(u,v);addEdge(v,u);
  68. }
  69. dfs1(1);dfs2(1,1);
  70.  
  71. for(register int i=1;i<=q;i++)
  72. {
  73. int a,b,c,d,lca1,lca2,res;
  74. a=read();b=read();c=read();d=read();
  75. lca1=lca(a,b);lca2=lca(c,d);
  76. if(dep[lca1]<dep[lca2])
  77. {
  78. swap(lca1,lca2);
  79. swap(a,c);
  80. swap(b,d);
  81. }
  82. if(lca(lca1,c)==lca1||lca(lca1,d)==lca1)res=1;
  83. else res=0;
  84.  
  85. if(res)printf("Y\n");
  86. else printf("N\n");
  87. }
  88. return 0;
  89. }

如果有人知道一开始的方法为什么错了请务必告诉我orz

[日常摸鱼]luogu3398仓鼠找sugar-树链剖分的更多相关文章

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

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

  2. 洛谷 3398 仓鼠找sugar——树链剖分

    题目:https://www.luogu.org/problemnew/show/P3398 原来只要把值记录成第几次就行了. 别忘了while(top[a]!=top[b])之后还要走一步. #in ...

  3. [luogu3398][仓鼠找sugar]

    luogu3398 思路: 假设松鼠a要从a1去a2,松鼠b要从b1去b2,ks表示lca(a1,a2)和lca(b1,b2)中深度较深的那个.那么,若要使得两只松鼠可能相遇,则只要满足lca(a1, ...

  4. [日常摸鱼][poj2777]Count Color-线段树

    辣鸡会考考完啦哈哈哈哈 题意:一块板分成$L$块,每次给一段连续的块染色或者询问一段有几种颜色,颜色的范围$\leq 30$ 我记得我好像做过一个类似的二维染色的问题-不过那个用树状数组直接过掉了- ...

  5. [日常摸鱼]bzoj1502[NOI2005]月下柠檬树-简单几何+Simpson法

    关于自适应Simpson法的介绍可以去看我的另一篇blog http://www.lydsy.com/JudgeOnline/problem.php?id=1502 题意:空间里圆心在同一直线上且底面 ...

  6. Luogu3398 仓鼠找sugar (LCA)

    第一发lg[]没开够RE了,下了数据本地一直停止运行,还以为是dfs死了,绝望一交,A了... 判断\(x\)是否在路径\(s-t\)上,只需满足 \(dep_{x} >= dep_{LCA(s ...

  7. 【Luogu3398】仓鼠找sugar(树链剖分)

    [Luogu3398]仓鼠找sugar(树链剖分) 题面 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他 ...

  8. 【树链剖分/倍增模板】【洛谷】3398:仓鼠找sugar

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

  9. P3398 仓鼠找sugar(树链剖分)

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

随机推荐

  1. Postman设置自动捕获传递Cookie教程

    目录 前言 一.安装 1.Postman安装Install Interceptor Bridge 2.谷歌浏览器安装扩展Postman Interceptor 二.使用 1. 打开Capture Co ...

  2. 如何使用iMazing编辑iOS设备的备份

    乍一看,编辑iPhone或iPad的备份似乎是一个奇怪的命题,但实际上这样做的原因有很多,例如在备份数据损坏时进行修复,又如合并来自不同设备的数据. iMazing对备份文件编辑的支持非常全面,即使备 ...

  3. 有什么数据恢复软件可以恢复CF数据

    虽然现在SD卡出现并且日益流行,但是CF卡(Compact Flash)作为一种存储设备,仍然是专业数码相机的主流标准.不仅是数码相机,CF接口还广泛用于PDA.笔记本电脑和包括台式机在内的各种设备. ...

  4. Boom 3D带你聆听《我们的乐队》音乐盛宴

    说到前段时间大热的音乐类综艺节目,<我们的乐队>肯定值得一提.<我们的乐队>是由谢霆锋.萧敬腾.王俊凯担任导师,以团队的形式组成各种风格的乐队,并通过同场比拼,最终选出获胜的乐 ...

  5. python3错误AttributeError: 'TestSequenceFunctions' object has no attribute 'seq'

    对比了两段代码发现,原来是setUp要用用大写才能被正确引用. 修改后,代码运行成功.

  6. 牛客练习赛67 D牛妹爱数列 题解(dp)

    题目链接 题目大意 给你一个长为n的01串,要你进行最少的操作使得这01串变成全为0,求最少操作次数 有两种不同类型的操作 1:翻转一个前缀 2:单调翻转一个元素 题目思路 居然是一个dp,标程讲的很 ...

  7. 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)

    今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...

  8. AppWeb认证绕过漏洞(CVE-2018-8715)

    AppWeb认证绕过漏洞(CVE-2018-8715) 一.漏洞描述 Appweb简介 Appweb是一个嵌入式HTTP Web服务器,主要的设计思路是安全.这是直接集成到客户的应用和设备,便于开发和 ...

  9. 【数据结构】关于前缀树(单词查找树,Trie)

    前缀树的说明和用途 前缀树又叫单词查找树,Trie,是一类常用的数据结构,其特点是以空间换时间,在查找字符串时有极大的时间优势,其查找的时间复杂度与键的数量无关,在能找到时,最大的时间复杂度也仅为键的 ...

  10. uni-app p-table下时间转换的问题

    问题描述: 从后台获取时间戳,转成日期格式,出现NaN的问题 uni的p-table插件 解决思路