zoj 2615 Cells 栈的运用
题目链接:ZOJ - 2615
Scientists are conducting research on the behavior of a newly discovered Agamic Cellular Microbe. This special kind of microbe is capable of massively reproducing by itself in a short time. The lifetime of an ACM consists of three phases:
1. The infancy phase, which starts from its birth and lasts for approximately several seconds;
2. The multiplication phase, in which one ACM can procreate up to 100 offspring in only several milliseconds;
3. The mature phase, in which it remains inactive for the rest of its life.
At the beginning of the experiment, a newborn, single cell of ACM, is
put into a suitable circumstance for its production. This cell,
numbered as 0, starts to multiply and its descendants are numbered,
starting from 1, according to their positions in the family hierarchy.
During the experiment special equipment is used to record the numbers of
the offspring generated by each of the ACM's. The experiment is stopped
after a certain time period.

Your task is to help the scientists to determine whether one ACM is an ancestor of another.
Input Description
Standard input will contain multiple test cases. The first line of the input is a single integer T (1 <= T <= 10) which is the number of test cases. T test cases follow, each preceded by a single blank line.
Each test case starts with a single integer N (1 <= N <= 300,000) which is the number of ACM's that have their descendants recorded. The following N integers (not necessarily on a same line), Ci (0 <= i < N, 0 <= Ci <= 100), give the number of offspring of the i-th ACM. The next line contains an integer M (1 <= M <= 1,000,000) which is the number of queries. M lines follow, each contains two integers a and b, querying whether the a-th ACM is an ancestor of the b-th ACM.
The total number of ACM's may be greater than N, but would never exceed 20,000,000.
Output Description
Results should be directed to standard output. Start each case with "Case #:" on a single line, where # is the case number starting from 1. Two consecutive cases should be separated by a single blank line. No blank line should be produced after the last test case.
For each query, print either "Yes" or "No" on a single line, which is the answer to the query.
题意描述:给出一棵树,然后M个询问,每个询问u,v,判断u是否是v的祖先。
算法分析:刚开始看到这道题的时候,立马想到了LCA,于是快速找到LCA的模板并敲上,检查一下,交之,Segmentation Fault (哇,这是ZOJ独有的Judge结果),后来又改了改,交之,MLE,无语中。。。看到别人的想法是运用栈和dfs来处理即可了,给每个节点搞两个时间戳:第一次访问的时间戳和第二次访问(可以想象dfs中回溯的思想)的时间戳,然后通过时间戳来判断是否为祖先。效率上挺快的,又学习了一课。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#define inf 0x7fffffff
using namespace std;
const int maxn=+;
const int M = +; int n,m,pre[M],bac[M],vis[M],dfs_clock;
int an[maxn],c[maxn],sum;
stack<int> S; void dfs()
{
memset(vis,,sizeof(vis));
while (!S.empty()) S.pop();
S.push();
while (!S.empty())
{
int u=S.top() ;
if (vis[u]==)
{
vis[u]=;
pre[u]= ++dfs_clock;
for (int i=an[u]+ ;i<=an[u]+c[u] ;i++)
{
if (i<n) S.push(i);
else {
pre[i]= ++dfs_clock;
bac[i]= ++dfs_clock;
}
}
}
else if (vis[u]==)
{
bac[u]= ++dfs_clock;
S.pop();
}
}
} int main()
{
int t,ncase=;
int ok=;
scanf("%d",&t);
while (t--)
{
if (ok) printf("\n");ok=;
printf("Case %d:\n",ncase++);
memset(pre,,sizeof(pre));
memset(bac,,sizeof(bac));
memset(an,,sizeof(an));
memset(c,,sizeof(c));
sum=;
dfs_clock=;
int a,b;
scanf("%d",&n);
for (int i= ;i<n ;i++)
{
scanf("%d",&c[i]);
an[i]=sum;
sum += c[i];
}
dfs();
scanf("%d",&m);
while (m--)
{
scanf("%d%d",&a,&b);
if (pre[a]<pre[b] && bac[a]>bac[b]) printf("Yes\n");
else printf("No\n");
}
}
return ;
}
zoj 2615 Cells 栈的运用的更多相关文章
- UVALive 3486/zoj 2615 Cells(栈模拟dfs)
这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...
- ZOJ - 2615 Cells
注意数组别开太小了,代码照着训练经典打的: #include <iostream> #include <sstream> #include <cstdio> #in ...
- 牡丹江.2014B(图论,树的直径)
B - Building Fire Stations Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & ...
- ZOJ 2967计算几何+单调栈
ZOJ - 2967Colorful Rainbows 题目大意:给你道彩虹,每条彩虹有两个属性,a斜率和b截距,也就是彩虹描述为y=ax+b的直线,并且不存在垂直的彩虹以及一样的彩虹.然后就说明,如 ...
- ZOJ 4016 Mergeable Stack(利用list模拟多个栈的合并,STL的应用,splice函数!!!)
Mergeable Stack Time Limit: 2 Seconds Memory Limit: 65536 KB Given initially empty stacks, ther ...
- LA 3486 Cells(判祖先+栈模拟dfs)
https://vjudge.net/problem/UVALive-3486 题意: 判断u是否是v的祖先. 思路: 很简单,dfs遍历,记录每个节点第一次访问时的时间戳 in[i] 和第二次访问时 ...
- 【栈模拟dfs】Cells UVALive - 3486
题目链接:https://cn.vjudge.net/contest/209473#problem/D 题目大意:有一棵树,这棵树的前n个节点拥有子节点,告诉你n的大小,以及这n个节点各有的子节点个数 ...
- 【火车出栈】ZOJ - 2603 Railroad Sort
好久没写递归了,怕手生再来练练手. 题意:车轨上有上图所示的n个中转栈,现有2n个列车,给出列车初始编号序列.列车从最右边驶入车轨,并且列车只能从右向左移动,要求给出列车中转操作序列,使列车经过这n个 ...
- ZOJ 3967 Colorful Rainbows --栈的应用
题意:给出n条y=ai*x+bi的直线.对于这些直线,如果存在x使得该直线y大于其他任意一直线,那么这条直线可以被看见,问有多少条直线可以被看见. 做法什么的不讲了,参见:http://blog.cs ...
随机推荐
- Spring---基于Spring IOC的小程序
实现的功能以及各文件间的关系 IHelloMessage:一个接口,用于定义输出问候信息. HelloWorld.HelloChina:接口的实现类.在这里表示人在不同的地方 Person:一个人物类 ...
- Fragment 和 Activity 之间通信
在 Activity 中获取 Fragment 实例: FragmentManager 提供了一个类似于 findViewById 的方法,专门用于从布局文件中获取 Fragment 实例: //通过 ...
- php伪随机数漏洞 以及脚本php_mt_seed的使用教程
前几天在群里看到了一个题目,发现自己没有接触过这个伪随机数这个漏洞,在此记录下. 搜索这两个函数 mt_scrand() mt_rand() mt_scrand(seed)这个函数的意思,是通过分发s ...
- linux常用的日志分析脚本
linux实用的日志分析脚本 日志分析 随意的tail一个access_log文件,下面是一条经典的访问记录 /Dec/::: +] “GET /query/trendxml/district/tod ...
- 04 JVM是如何执行方法调用的(下)
虚方法调用 Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用会被编译成 invokeinterface 指令.这两种指令,均属于 Java 虚拟机中的虚 ...
- 04 JVM是如何执行方法调用的(上)
重载和重写 重载:同一个类中定义名字相同的方法,但是参数类型或者参数个数必须不同. 重载的方法在编译过程中就可完成识别.具体到每一个方法的调用,Java 编译器会根据所传入参数的生命类型来选取重载方法 ...
- 菜鸟之路——Linux基础::计算机网络基础,Linux常用系统命令,Linux用户与组权限
最近又重新安排了一下我的计划.准备跟着老男孩的教程继续学习,感觉这一套教程讲的很全面,很详细.比我上一套机器学习好的多了. 他的第一阶段是Python基础,第二阶段是高等数学基础,主要将机器学习和深度 ...
- web项目中各种路径的获取(复制,为以后好找资源)
web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获 ...
- [Cocos2dx Bug] [win32] Function CCFileUtils::fullPathFromRelativeFile forget consider the path separated by '\\'
[Cocos2dx 2.2.4] [win32平台Bug] const char* CCFileUtils::fullPathFromRelativeFile(const char *pszFilen ...
- 项目记事【StreamAPI】:使用 StreamAPI 简化对 Collection 的操作
最近项目里有这么一段代码,我在做 code-review 的时候,觉得可以使用 Java8 StreamAPI 简化一下. 这里先看一下代码(不是源码,一些敏感信息被我用其他类替代了): privat ...