给一棵树,每次每次询问一个点是否是另一个点的祖先?

首先,题目的读入就有点坑爹,注意,每个节点的值是说明它下面有多少个儿子节点,直接对于每个下标保存一个值即可。

对于查询是否是祖先,我们可以对于每一个节点打上两个dfs标记,如果一个点是另一个点的祖先,那么它的两个标记一定在祖先的范围之内。

还要注意,由于点数极其多,直接dfs会爆栈,那么我们需要手动模拟栈的执行过程。简单,数组模拟就好了。

召唤代码君:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define maxn 20022000
using namespace std; int l[maxn],r[maxn],sum[];
bool a[maxn];
int T,n,k,m,cur,TAG=,dfs_clock,cas=;
int stack[maxn],top; void dfs()
{
for (int i=; i<maxn; i++) a[i]=false;
dfs_clock=stack[top=]=;
while (top>){
k=stack[top];
if (!a[k]){
a[k]=true,l[k]=++dfs_clock;
if (k<n)
for (int i=k==?:sum[k-]+; i<=sum[k]; i++) stack[++top]=i;
}
else r[k]=++dfs_clock,top--;
}
} int main()
{
int x,y;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
for (int i=; i<n; i++){
scanf("%d",&k);
sum[i]=i==?k:sum[i-]+k;
}
dfs();
if (cas++) printf("\n");
printf("Case %d:\n",cas);
scanf("%d",&m);
while (m--){
scanf("%d%d",&x,&y);
if (l[x]<l[y] && r[x]>r[y]) puts("Yes");
else puts("No");
}
}
return ;
}

UVAlive3486_Cells的更多相关文章

随机推荐

  1. .tar.gz文件和.rpm文件的区别

    Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能在另外的平台或环境下正确执 ...

  2. ctags+cscope

    a opensource study website http://www.lanedo.com/2013/the-hidden-pearls-of-tracker-2/ http://www.lan ...

  3. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  4. Centos中的Docker 配置:将loop-lvm改为derict-lvm

    重新装了个虚拟机,回顾一下最近三天的工作: Centos 查看版本 cat /etc/redhat-release yum -y upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内 ...

  5. Android新浪微博获取评论信息、发表评论、转发微博等

    首先前面一节中说过,获取用户的微博信息,这里简单介绍下获取微博的评论信息,以及对微博进行评论,转发微博等. OAuth认证,这里就不多说了, 我说名一下接口: 获取微博的评论列表接口: http:// ...

  6. Application tried to present a nil modal view controller on target “Current View Controller”解决方案

    情景再现 1,自定义一个storyboard: 打开xcode,按下cmd+N,新建一个Storyboard--->next 将新建立的storyboard命名为:TestViewControl ...

  7. dedecms 打印出网站所有 文章标题和链接(URL)的方法

    {dede:arclist row="100000"} <li>[field:fulltitle/]***网站URL地址***[field:arcurl/]</l ...

  8. Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

    本文提供了一个在Windows环境下使用Visual Studio 2013编辑现有源代码并且保持目录结构的方法.本文使用VS2013中文社区版做示例(本版本为免费版,可在VS官网下载),其他版本的V ...

  9. win8系统安装xampp后apache无法启动

    根据提示判断为端口被占用: 处理方法: 右击左下角windows图标,选择运行,调了同cmd; 依次排除80及443端口占用情况: netstat -ano|findstr "80" ...

  10. 监听EditText变化---TextWatcher 类用法详解

    http://www.cnblogs.com/yjing0508/p/5316985.html TextWatcher textWatcher = new TextWatcher() { @Overr ...