祖孙询问

题目描述

已知一棵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. 7、java封装、继承、聚合组合

    1封装:封装的是属性,封:private 装:set.get‘ 可以看做将属性和get/set方法捆绑的过程. 优点:1.防止对封装数据的未经授权的访问,提高安全性.使用者只能通过事先预定好的方法来访 ...

  2. nodejs 实现简单 http 代理并缓存

    var http = require('http'), fs = require("fs"), url = require('url'), querystring = requir ...

  3. JAVA输出带BOM的UTF-8编码的文件

    当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带bom的,可是windows的Excel是使用bom来确认utf8编码的,全部须要把bom写到文件的开头. 微软在 ...

  4. 安卓开发,adb shell 调试sqlite3数据库

    安卓开发,adb shell 调试sqlite3数据库 在安卓中创建了sqlite3数据库,想要调试怎么办? 通过adb shell来进行查看. 第一步,将adb加入到系统变量中. 这样就可以在命令行 ...

  5. javascript中如何获取对象名

    javascript中如何获取对象名 一.总结 一句话总结:将对象传入参数,看参数是否为函数(js中的对象和函数是一个意思么(函数肯定是对象)),对象参数.name属性即可获得 //版本4 funct ...

  6. 1.MySQL与MongoDB的操作对比,以及区别

    转自:https://www.cnblogs.com/chris-oil/p/4982490.html MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoD ...

  7. Android属性动画-Interpolator和ViewPropertyAnimator的用法

    Interpolator的用法 Interpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果.那么什么叫做非线性运 ...

  8. Spring 注解拦截器使用详解

    Spring mvc拦截器 平时用到的拦截器通常都是xml的配置方式.今天就特地研究了一下注解方式的拦截器. 配置Spring环境这里就不做详细介绍.本文主要介绍在Spring下,基于注解方式的拦截器 ...

  9. 不再安全的 OSSpinLock

    自旋锁的本质是持续占有cpu,直到获取到资源.与其他锁的忙等待的实现机制不同. 昨天有位开发者在 Github 上给我提了一个 issue,里面指出 OSSpinLock 在新版 iOS 中已经不能再 ...

  10. Display Video

    ###chromium webrtc视频显示 ###两个数据源:本地数据源: MediaStreamRemoteVideoSource(content/renderer/media/webrtc/me ...