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; ...
随机推荐
- 使用FreeSWITCH做电话自动回访设置
一.背景介绍: 目前公司在处理客户回访方面,需要人工进行电话回访,尤其是逢年过节的时候,电话问候更能体现服务的品质: 在某些公司,电话销售员需要给大批量的陌生用户打电话,如果能过滤掉不关心的用户,销售 ...
- PYTHON-字符编码&文件处理-练习
# 把多个账号密码写入文件中# 编写登录功能,登录失败三次 程序退出. # 登录账号密码定义,用列表分割,for循环取值=====判断对错=====循环条件3次退出# with open(r'db.t ...
- vue系列之Vue-cli
Vue-cli是Vue的脚手架工具 vue-cli 地址:https://github.com/vuejs/vue-cli 安装 npm install -g vue-cli 使用 vue init ...
- html标签之Object标签详解
定义和用法 定义一个嵌入的对象.请使用此元素向您的 XHTML 页面添加多媒体.此元素允许您规定插入 HTML 文档中的对象的数据和参数,以及可用来显示和操作数据的代码. <object> ...
- mysql8.0CTE实现递归查询
+----+----------+--------------+| ID | ParentID | name |+----+----------+--------------+| 1 ...
- java.lang.Math
四舍五人 System.out.println(Math.round(1.8f));//输出位2 static(静态)方法random() //: object/Shifting.java packa ...
- django----查看数据库中的sql语句
加载setting.py 文件中 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console ...
- HRBUST - 1818 石子合并 区间dp入门
有点理解了进阶指南上说的”阶段,状态和决策“ /* 区间dp的基础题: 以区间长度[2,n]为阶段,枚举该长度的区间,状态dp[l][r]表示合并区间[l,r]的最小费用 状态转移方程dp[l][r] ...
- java根据word模板导出word文件
1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...
- [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估计也不会有: 问题:可以自己做浏览器插件播放RTSP吗? 答案:可以的,chrome做ppapi插件 ...