祖孙询问

题目描述

已知一棵n个节点的有根树。有m个询问。每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系。

输入输出格式

输入格式:

输入第一行包括一个整数n表示节点个数。 接下来n行每行一对整数对a和b表示a和b之间有连边。如果b是-1,那么a就是树的根。 第n+2行是一个整数m表示询问个数。 接下来m行,每行两个正整数x和y。

输出格式:

对于每一个询问,如果x是y的祖先,输出1;如果y是x的祖先,输出2;否则输出0。

输入输出样例

输入样例#1: 复制

10
234 -1
12 234
13 234
14 234
15 234
16 234
17 234
18 234
19 234
233 19
5
234 233
233 12
233 13
233 15
233 19
输出样例#1: 复制

1
0
0
0
2

说明

对于30%的数据,n, m ≤ 1000。

对于100%的数据,n, m ≤ 40000,每个节点的编号都不超过40000。

思路:求出两点的LCA后,若其中有一个点为LCA,则这个点为另一个点的祖先,输出 1 或 2,反之,输出 0

#include<cstdio>
#include<algorithm> const int N=;
int n,m,tot,root,fa[N],ans[N],head[N],_head[N];
struct Edge{
int v,nxt;
}edge[N<<];
struct EDge{
int x,v,nxt,id;
}_edge[N<<]; inline int read()
{
int n=,w=;register char c=getchar();
while(c<''||c>''){if(c=='-')w=-;c=getchar();}
while(c>=''&&c<='')n=n*+c-'',c=getchar();
return n*w;
} int find(int x)
{return fa[x]==x?fa[x]:fa[x]=find(fa[x]);} inline void add(int u,int v)
{edge[++tot]=(Edge){v,head[u]};head[u]=tot;}
inline void _add(int x,int u,int v,int i)
{_edge[++tot]=(EDge){x,v,_head[u],i};_head[u]=tot;} bool vis[N];
void dfs(int now)
{
vis[now]=true;
for(int v,i=head[now];i;i=edge[i].nxt)
if(!vis[v=edge[i].v])
dfs(v),fa[v]=now;
for(int x,i=_head[now];i;i=_edge[i].nxt)
if(vis[_edge[i].v])
{
x=find(_edge[i].v);
if(x==now)
ans[_edge[i].id]=(now==_edge[i].x?:);
}
} int main()
{
n=read();
for(int i=;i<=N;++i)
fa[i]=i;
for(int u,v,i=;i<=n;++i)
{
u=read(),v=read();
if(v==-)
root=u;
else add(u,v),add(v,u);
}
tot=;m=read();
for(int x,y,i=;i<=m;++i)
{
x=read(),y=read();
_add(x,x,y,i),_add(x,y,x,i);
}
dfs(root);
for(int i=;i<=m;++i)
printf("%d\n",ans[i]);
return ;
}

hzwer 模拟题 祖孙询问的更多相关文章

  1. 8.3-8.4NOIP模拟题总结

    一:成绩 Day1 score=100+100+20 Day2 score=100+30+0 这成绩还是不行啊,仍需继续加油(抱怨一句暴力分有点少#滑稽) 二:题目分析 Day1 T1祖孙询问: 已知 ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. Capture the Flag ZOJ - 3879(模拟题)

    In computer security, Capture the Flag (CTF) is a computer security competition. CTF contests are us ...

  4. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  5. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  6. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  7. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  8. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  9. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

随机推荐

  1. Linux磁盘分区(一):加入

    ***********************************************声明************************************************ 原创 ...

  2. 从事IT, 中国IT人员最值得骄傲的时候

    大学的专业是学习经济与贸易的,后来接触了IT产业,于是乎自己对IT产业的经济王国就特别感兴趣,经济和IT 就像自己的老婆情人一样.令人着迷不舍. IT热和互联网热现在相信人尽皆知.我想告诉那些即将成为 ...

  3. IDEA无法启动:Failed to create JVM:error code -4

    发生该错误的原因是由于IDEA须要使用的连续内存空间没有得到满足,解决方式: 1.减小-Xmx和-XX:PermSize的值     切换到IDE_HOME\bin\文件夹下,找到<produc ...

  4. 12、NIO、AIO、BIO一

    1.NIO概述 什么是NIO:NIO是New I/O的简称,与旧式的基于流的I/O方式相对,从名字看,他表示新的一套JAVA I/O标准.它是在java1.4中被纳入到JDK中的,并具有以下特性: - ...

  5. Python库之pyudev (一)

    库pyudev是libudev的python封装,libudev提拱了对本地设备的列举与查询API. 1.安装 pip install pyudev 2. 使用 2.1 开始 导入pyudev,验证库 ...

  6. ConfigurationSection

    https://msdn.microsoft.com/en-us/library/system.configuration.configurationsection(v=vs.110).aspx Re ...

  7. WebAPI的自动化监控和预警

    Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警 前言 这次主要分享通过Metrics.net + influxdb + grafana 构建Web ...

  8. 减少XML文件数

    在android开发中,做出漂亮的ui的应用,往往有数量庞大的xml文件.比如,我们要给一个Button加上一个selector,如果背景不是图片,就得写三个xml文件,分别是:edit_focuse ...

  9. PostgreSQL两种事务隔离级

    PostgreSQL两种事务隔离级别: 读已提交:PostgreSQL中缺省隔离级别.当一个事务运行在这个隔离级别时,一个SELECT查询只能看到查询开始之前提交的数据而永远无法看到未提交的数据或者在 ...

  10. <Sicily>Greatest Common Divisors

    一.题目描述 A common divisor for two positive numbers is a number which both numbers are divisible by. It ...