BZOJ4122 : [Baltic2015]File paths
对于在$o$点的某个询问,有两种情况:
情况1:走到任意一个点$x$然后超链接跳到$o$的某个祖先$y$再走到$o$。
枚举所有$y$看看是否存在$x$即可。
时间复杂度$O(nm)$。
情况2:走到$o$的某个祖先$x$,然后走到$x$子树内某个点$y$,在$x$和$y$之间不断通过超链接来回走,最后再从$x$走到$o$。
枚举$x$和$y$维护出每种环长是否可能存在,然后枚举约数判断是否存在对应的$x$和$y$即可。
时间复杂度$O(n^2+md(k))$。
#include<cstdio>
#define N 3010
int n,m,K,S,i,x,a[N],len[N],g[N],G[N],v[N<<1],nxt[N<<1],ed;
int q[N],t,st[N],en[N],dfn,seq[N],f[2000010];bool ans[N];
inline void add(int&x,int y){v[++ed]=y;nxt[ed]=x;x=ed;}
void dfs1(int x){
q[++t]=a[x];
seq[st[x]=++dfn]=a[x];
for(int i=G[x];i;i=nxt[i]){
int o=v[i];
for(int j=1;j<=t;j++){
int k=K-S-a[x]-len[o]+q[j];
if(k>=0&&k<=K)if(f[k]){ans[o]=1;break;}
}
}
for(int i=g[x];i;i=nxt[i])dfs1(v[i]);
t--;
en[x]=dfn;
}
void dfs2(int x){
for(int i=st[x];i<=en[x];i++)f[seq[i]-a[x]+S]++;
for(int i=G[x];i;i=nxt[i]){
int o=v[i];
if(ans[o])continue;
int k=K-a[x]-len[o];
for(int j=1;j*j<=k;j++)if(k%j==0)if(f[j]||f[k/j]){ans[o]=1;break;}
}
for(int i=g[x];i;i=nxt[i])dfs2(v[i]);
for(int i=st[x];i<=en[x];i++)f[seq[i]-a[x]+S]--;
}
int main(){
scanf("%d%d%d%d",&n,&m,&K,&S);S++;
for(i=1;i<=n;i++){
scanf("%d%d",&x,&a[i]);
a[i]+=a[x]+1;
add(g[x],i);
}
for(i=1;i<=m;i++){
scanf("%d%d",&x,&len[i]);
len[i]++;
ans[i]=a[x]+len[i]==K;
if(!ans[i])add(G[x],i);
}
for(i=0;i<=n;i++)f[a[i]]=1;
dfs1(0);
for(i=0;i<=n;i++)f[a[i]]=0;
dfs2(0);
for(i=1;i<=m;i++)puts(ans[i]?"YES":"NO");
return 0;
}
BZOJ4122 : [Baltic2015]File paths的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Java文件IO操作应该抛弃File拥抱Paths和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...
- Java基础教程——File类、Paths类、Files类
File类 File类在java.io包中.io代表input和output,输入和输出. 代表与平台无关的文件和目录. 可以新建.删除.重命名,但不能访问文件内容. File类里的常量: impor ...
- File类基础
File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...
- Remote Desktop File Format
转自:http://engrmosaic.uncc.edu/mosaic-anywhere/remote-desktop-file-format The new Terminal Services c ...
- java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)
java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...
- JAVA基础知识之NIO.2——Path,Paths,Files
NIO.2 JDK7对NIO进行了重大改进,主要包含以下两方面 新增Path接口,Paths工具类,Files工具类. 这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程. ...
- 2.2.5 NIO.2 Path 和 Java 已有的 File 类
NIO与IO交互 toPath() File -- Path toFile() Path -- File Demo: import java.io.File; import java.nio.file ...
- Java文件IO操作应该抛弃File拥抱Path和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...
随机推荐
- grep用法【转】
简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...
- flask_restplus(1)- 未完成
快速开始 本指南假设您对Flask有一定的了解,并且您已经安装了Flask和Flask- restplus.如果没有,则按照安装部分中的步骤操作. 初始化 与其他所有扩展一样,您可以使用应用程序对象初 ...
- Bootstrap3.0学习第一轮(入门)
详情请查看 http://aehyok.com/Blog/Detail/7.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...
- 【转】深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型.如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍. JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知道什么叫简单,下 ...
- Gitlab的SSH配置(linux和windows双版本)
1. 步骤 1.首先现在电脑端安装好git,windows端请安装Git for Windows,Linux端请自行网上查询(Ubuntu: sudo apt-get install git) 2 ...
- 升级 php composer 版本
在执行 composer update 时,报错 You made a reference to a non-existent script @php artisan package:discover ...
- php-fpm 配置文件检测
用过 Nginx 的兄弟都知道,修改 Nginx 配置文件之后,可以使用 nginx -t 来检测配置文件是否有语法错误. 今天配置 opcache 的时候,发现 php-fpm 也可以检测 php- ...
- Jmeter录制浏览器并回放
确认证书 1.查看证书 进入Jmeter安装目录下的bin,找到ApacheJMeterTemporaryRootCA.crt 证书文件(如jmeter在安装目录中未找到,可尝试先执行下面的开始录制步 ...
- python 全栈开发,Day18(对象之间的交互,类命名空间与对象,实例的命名空间,类的组合用法)
一.对象之间的交互 现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人.现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法.有了狗类,我们还 ...
- RabbitMQ(二):Java 操作队列
1. 简单模式 模型: P:消息的生产者 队列:rabbitmq C:消息的消费者 获取 MQ 连接 public static Connection getConnection() throws I ...