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; ...
随机推荐
- git强制覆盖更新
1.选择项目,右键选择Team,选择Team里面的Reset. 2.点击Reset后弹出Reset窗口,选择Hard选项,这样就会把远端的项目完全拉下来覆盖本地,本地没有的文件也会被创建,点击确定.
- 006_netstat中state详解
TCP三次握手的过程如下: 主动连接端发送一个SYN包给被动连接端: 被动连接端收到SYN包后,发送一个带ACK和SYN标志的包给主动连接端: 主动连接端发送一个带ACK标志的包给被动连接端,握手动作 ...
- 关于ftp上传changeWorkingDirectory()方法的路径切换问题
在上传时 FTPClient提供了upload方法,对于upload(file,path)的第二个参数path ,上传到哪里的这个路径, ftp是利用changeWorkingDirectory()方 ...
- IntelliJ IDEA使用教程
注:本文来源:李学凯 的<IntelliJ IDEA使用教程 (总目录篇)> 一:(总目录篇)_1:硬件要求 IntelliJ IDEA 对硬件的要求看上去不是很高.可是实际在开发中其实并 ...
- JVM内存管理概述
1.概述 java不在需要开发人员显示的分配内存和回收内存,而是由JVM自动管理内存的分配和回收(又称为垃圾回收-GC),这简化了编程难度,但同时可能使得程序员在不知不觉中浪费了很多内存,导致JVM花 ...
- linux 取消笔记本触摸键
关闭触摸 sudo rmmod psmouse 关闭触摸和按键 sudo modprobe -r psmouse 打开 sudo modprobe psmouse
- python + slenium自动化测试设置元素等待
WebDriver 提供了两种类型的等待:显式等待和隐式等待. 显式等待 显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常 (TimeoutExcepti ...
- html中hr的各种样式使用
第一种: <hr style=" height:2px;border:none;border-top:2px dotted #185598;" /> height:2p ...
- Ext.js项目(一)
这个项目整体采用代码生成器生成,具体看下图:
- DB操作-用批处理执行Sql语句
用批处理在命令行状态下调用查询分析器来执行这个sql文件里的语句.下面就是sqlserver帮助里对于查询分析器(isqlw)命令行参数的解释:isqlw 实用工具(SQL 查询分析器)使您得以输入 ...