题目描述

小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆(d)。他们都会走最短路径。现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友?

小仓鼠那么弱,还要天天被zzq大爷虐,请你快来救救他吧!

输入输出格式

输入格式:

第一行两个正整数n和q,表示这棵树节点的个数和询问的个数。

接下来n-1行,每行两个正整数u和v,表示节点u到节点v之间有一条边。

接下来q行,每行四个正整数a、b、c和d,表示节点编号,也就是一次询问,其意义如上。

输出格式:

对于每个询问,如果有公共点,输出大写字母“Y”;否则输出“N”。

输入输出样例

输入样例#1:

  1. 5 5
  2. 2 5
  3. 4 2
  4. 1 3
  5. 1 4
  6. 5 1 5 1
  7. 2 2 1 4
  8. 4 1 3 4
  9. 3 1 1 5
  10. 3 5 1 4
输出样例#1:

  1. Y
  2. N
  3. Y
  4. Y
  5. Y

说明

本题时限1s,内存限制128M,因新评测机速度较为接近NOIP评测机速度,请注意常数问题带来的影响。

20%的数据 n<=200,q<=200

40%的数据 n<=2000,q<=2000

70%的数据 n<=50000,q<=50000

100%的数据 n<=100000,q<=100000


想到了lca,但是不知道怎么判断一个点在另一个路径上,就没做

设分别为x和y,x更深

只要判断x能否提升到y并且c或d能提升到x就可以了

PS:我竟然沙茶的i递增顺序提升....

  1. //
  2. // main.cpp
  3. // luogu10.3
  4. //
  5. // Created by Candy on 10/6/16.
  6. // Copyright © 2016 Candy. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <cstdio>
  11. #include <algorithm>
  12. #include <cstring>
  13. #include <cmath>
  14. #define debug(x) cout<<#x<<'='<<x<<' '
  15. using namespace std;
  16. typedef long long ll;
  17. const int N=1e5+;
  18. inline int read(){
  19. char c=getchar();int x=,f=;
  20. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  21. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  22. return x*f;
  23. }
  24. int n,q,a,b,c,d;
  25. struct edge{
  26. int v,ne;
  27. }e[N<<];
  28. int cnt=,h[N];
  29. inline void ins(int u,int v){
  30. cnt++;
  31. e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
  32. cnt++;
  33. e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
  34. }
  35. int fa[N][],deep[N],vis[N];
  36. void dfs(int u){
  37. vis[u]=;
  38. for(int j=;(<<j)<=deep[u];j++)
  39. fa[u][j]=fa[fa[u][j-]][j-];
  40. for(int i=h[u];i;i=e[i].ne){
  41. int v=e[i].v;
  42. if(vis[v]) continue;
  43. deep[v]=deep[u]+;
  44. fa[v][]=u;
  45. dfs(v);
  46. }
  47. }
  48. int lca(int x,int y){
  49. if(deep[x]<deep[y]) swap(x,y);
  50. int bin=deep[x]-deep[y];
  51. for(int i=;i<=;i++)
  52. if((<<i)&bin) x=fa[x][i];
  53.  
  54. for(int i=;i>=;i--)
  55. if(fa[x][i]!=fa[y][i]){
  56. x=fa[x][i];
  57. y=fa[y][i];
  58. }
  59. if(x==y) return x;
  60. else return fa[x][];
  61. }
  62. bool check(int x,int y){
  63. for(int i=;i>=;i--)
  64. if(deep[fa[x][i]]>=deep[y]) x=fa[x][i];
  65. return x==y;
  66. }
  67. int main(int argc, const char * argv[]) {
  68. n=read();q=read();
  69. for(int i=;i<=n-;i++){a=read();b=read();ins(a,b);}
  70. deep[]=-;
  71. dfs();
  72. //for(int i=1;i<=n;i++) for(int j=0;j<=3;j++) printf("fa %d %d %d\n",i,j,fa[i][j]);
  73. for(int i=;i<=q;i++){
  74. a=read();b=read();c=read();d=read();
  75. int x=lca(a,b),y=lca(c,d);
  76. if(deep[x]<deep[y]){swap(x,y);swap(a,c);swap(b,d);}
  77. if(check(x,y)&&(check(c,x)||check(d,x))) printf("Y\n");
  78. else printf("N\n");
  79. }
  80. return ;
  81. }

洛谷10月月赛Round.1| P3398 仓鼠找sugar[LCA]的更多相关文章

  1. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  2. 洛谷10月月赛Round.3

    Rank11:260=60+100+100 P2409 Y的积木 题目背景 Y是个大建筑师,他总能用最简单的积木拼出最有创意的造型. 题目描述 Y手上有n盒积木,每个积木有个重量.现在他想从每盒积木中 ...

  3. 洛谷10月月赛Round.1| P3399 丝绸之路 [DP]

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  4. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

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

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

  6. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  7. 洛谷11月月赛round.1

    太感动了#2 thwfhk 240 (801ms) 100 100 40   又一张明信片,话说10月的怎么还没收到   P2246 SAC#1 - Hello World(升级版) 题目背景 一天, ...

  8. 【LGR-061】洛谷10月月赛 II & X Round 4 Div.1&Div 2

    X Round的题目质量还是一如既往的高 然而每次周末我都要写作业没法用心打233主要是被陈指导放了鸽子 占坑代填(最近坑开的有点多)

  9. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

随机推荐

  1. disabled="true" 的标签元素不可提交

    把jsp页面的input 标签设置成不可编辑: <input  name="Id"    value="${order.Id}" readOnly=&qu ...

  2. json-lib的使用《二》

    上篇文章主要集中在了使用json-lib来实现JSON字符串和java中的对象的互转上,忽视了json-lib本身的功能,json-lib中有两个类比较重要:JSONObject和JSONArray, ...

  3. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  4. Linq的分页与组合查询的配合使用

    1.首先使用Linq连接数据库,并扩展属性 public partial class User { public string SexStr { get { string end = "&l ...

  5. jQuery实现鼠标经过图片变亮效果

    在线体验效果:http://hovertree.com/texiao/jquery/1.htm 以下是完整源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  6. 简单介绍JSON

    如下图:

  7. 各大互联网公司前端面试题(HTML/CSS)

    Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto ...

  8. Linux安全基础:sed命令的使用

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  9. 转载 Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

  10. 通过VLD扩展分析PHP opcode

    安装VLD扩展 ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld 生成脚本opcode   > p ...