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; ...
随机推荐
- c# WinFo判断当前程序是否已经启动或存在的几种方式
第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行 static class Program { /// <summary> /// 应用程序的主入口点. /// </s ...
- WPF中添加Winform用户自定义控件
过程:创建WPF工程->创建Winform用户自定义控件工程->WPF中引用控件->添加到Xaml页面 1.首先在WPF工程的解决方案上右击选择添加新建项目: 选择Windows窗体 ...
- S5PV210串口
串口设置之输入输出字符 S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它 ...
- spring整合strus2的Hellowworld
比较笨,看了三遍才能理解敲对并正确运行: step: 1.建立web工程( Dynamic Web project)一定要勾上创建web.xml 2.导入jar包 这个就比较坑了,我查了有半个小时才查 ...
- Java验证码
下面这段代码可用于Jsp+Servle+JavaBean中做验证码: <%@ page contentType="image/jpeg" import="java. ...
- C <string.h>常用函数介绍
1. strcpychar *strcpy(char *destin, char *source);功能:将source指向的字符串拷到destin. int main() { ]; "; ...
- python 全栈开发,Day57(响应式页面-@media介绍,jQuery补充,移动端单位介绍,Bootstrap学习)
昨日内容回顾 ajax //get post 两种方式 做 请求 get 主要是获取数据 post 提交数据 同一个路由地址 既可以是get请求也可以是post请求 一个路由对应一个函数 get请求 ...
- 2017-2018-2 20155309南皓芯 Exp6 信息搜集与漏洞扫描
实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 4.漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞 基 ...
- 【C++ Primer | 10】STL算法
第一部分 find(beg, end, val) equal(beg1, end, beg2) min(val1, val2) max(val1, val2) min_element(beg, end ...
- JAVA开发工程师面试(1)
我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...