https://www.luogu.org/problem/show?pid=3398#sub

题目描述

小仓鼠的和他的基(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:

5 5
2 5
4 2
1 3
1 4
5 1 5 1
2 2 1 4
4 1 3 4
3 1 1 5
3 5 1 4
输出样例#1:

Y
N
Y
Y
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,设为S,如果构成浅的LCA的两点中任意一点与S的LCA==S,那就能相遇

 #include <algorithm>
#include <cstdio>
#include <vector> using namespace std; const int N();
vector<int>vec[N];
int n,q,x,y,u,v;
int size[N],deep[N],top[N],dad[N]; void DFS(int x)
{
size[x]=; deep[x]=deep[dad[x]]+;
for(int i=;i<vec[x].size();i++)
if(dad[x]!=vec[x][i])
{
dad[vec[x][i]]=x;
DFS(vec[x][i]);
size[x]+=size[vec[x][i]];
}
} void DFS_(int x)
{
int t=; if(!top[x]) top[x]=x;
for(int i=;i<vec[x].size();i++)
if(dad[x]!=vec[x][i]&&size[t]<size[vec[x][i]]) t=vec[x][i];
if(t) top[t]=top[x], DFS_(t);
for(int i=;i<vec[x].size();i++)
if(dad[x]!=vec[x][i]&&t!=vec[x][i]) DFS_(vec[x][i]);
} int LCA(int x,int y)
{
while(top[x]!=top[y])
{
if(deep[top[x]]<deep[top[y]]) swap(x,y);
x=dad[top[x]];
}
if(deep[x]>deep[y]) swap(x,y);
return x;
} int main()
{
scanf("%d%d",&n,&q);
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
vec[x].push_back(y);
vec[y].push_back(x);
}
DFS(); DFS_();
while(q--)
{
scanf("%d%d%d%d",&x,&y,&u,&v);
int s=LCA(x,y),t=LCA(u,v);
if(deep[s]<deep[t]) swap(s,t),swap(x,u),swap(y,v);
if(LCA(s,u)==s||LCA(s,v)==s) printf("Y\n");
else printf("N\n");
}
return ;
}

最新文章

  1. python 文件拷贝
  2. 微信公共平台开发1 .net
  3. July 30th, Week 31st Saturday, 2016
  4. ueditor上传图片到七牛云存储(form api,java)
  5. DSS 搭建手机流媒体服务器
  6. Winform 窗体的操作
  7. openstack单元測试用组件一览
  8. php base64数据与图片的转换
  9. maven setting配置
  10. webmagic加上了注解支持
  11. javascript 学习总结(一)
  12. vue项目中遇到的问题
  13. python3学习笔记2---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/2
  14. DSAPI+DS控件库 Windows7风格控件演示
  15. jsp笔记----97DatePicker日期插件简单使用
  16. ESAPI学习笔记
  17. @suppresswarnings(unchecked)的作用
  18. MQTT协议笔记之mqtt.io项目HTTP协议支持
  19. UVA-10384 The Wall Pushers (IDA*)
  20. [BZOJ4872][六省联考2017]分手是祝愿(期望DP)

热门文章

  1. 【翻译自mos文章】 在错误的从os级别remove掉 trace file 之后,怎么找到该trace file的内容?
  2. iOS_21团购_地图功能
  3. 屌丝、小白怎么拿国内巨头offer
  4. JMX学习笔记(一)-MBean
  5. Python学习历程之面对对象浅识
  6. 42.写入XML
  7. 知网下载pdf文件的方法
  8. 利用IOC—— Castle进行对象映射,以及结合Nhibernate访问数据库
  9. jQuery $.ajax跨域-JSONP获取JSON数据(转载)
  10. 使用Eclipse将项目上传至远程GitLab