luogu4268 Directory Traversal (dfs)
题意:给一个树状的文件结构,让你求从某个文件夹出发访问到所有文件,访问路径字符串长度之和的最小值,其中,访问父节点用..表示,两级之间用/分割
做两次dfs,第一次算DownN[x]和DownS[x],分别代表从x/访问到它子树中的文件个数和长度之和
第二次算UpN[x]和UpS[x],分别代表从x/访问到不在它子树中(也就是要先往上走)的文件个数和长度之和。
最后某个点的答案就是DownS[x]+UpS[x],取最小即可。
(由于我的zz写法,还需要再单独算一下根的答案)
#include<bits/stdc++.h>
#define ll long long
#define pa pair<int,int>
using namespace std;
const int maxn=; ll rd(){
ll x=;char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
} ll dws[maxn],dwn[maxn],ups[maxn],upn[maxn],ans;
int fa[maxn],son[maxn][],sonh[maxn],sct;
int N,v[maxn];char ch[];bool isdir[maxn]; inline void adson(int f,int s){
son[sct][]=s;son[sct][]=sonh[f];sonh[f]=sct++;fa[s]=f;
} void dfs1(int x){
for(int i=sonh[x];i!=-;i=son[i][]){
int s=son[i][];
dfs1(s);dwn[x]+=dwn[s];
dws[x]+=dwn[s]*(v[s]+isdir[s])+dws[s];
}
} void dfs2(int x){
for(int i=sonh[x];i!=-;i=son[i][]){
int s=son[i][];if(!isdir[s]) continue;
upn[s]=upn[x]+dwn[x]-dwn[s];
ups[s]=ups[x]+*upn[s]+dws[x]-dws[s]-dwn[s]*(v[s]+isdir[s]);
dfs2(s);
//printf("%d-ans:%d upn:%d ups:%d dwn:%d dws:%d \n",s,ups[s]+dws[s],upn[s],ups[s],dwn[s],dws[s]);
ans=min(ans,ups[s]+dws[s]);
}
} int main(){
int i,j,k;
N=rd();memset(sonh,-,sizeof(sonh));
for(i=;i<=N;i++){
scanf("%s",ch);
v[i]=strlen(ch);j=rd();
if(!j) dwn[i]=;else isdir[i]=;
for(k=;k<=j;k++) adson(i,rd());
}ans=2e13;
dfs1();dfs2();
printf("%lld\n",min(ans,dws[]));
}
luogu4268 Directory Traversal (dfs)的更多相关文章
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- Web for pentester_writeup之Directory traversal篇
Web for pentester_writeup之Directory traversal篇 Directory traversal(目录遍历) 目录遍历漏洞,这部分有三个例子,直接查看源代码 Exa ...
- [luogu4268][bzoj5195][USACO18FEB]Directory Traversal
题目大意 给你\(n\)个文件的关系,求出某一个点,这个点到叶节点的长度的总距离最短.(相对长度的定义在题目上有说明) 感想 吐槽一下出题人,为什么出的题目怎么难看懂,我看了整整半个小时,才看懂. 题 ...
- leetcode 102 Binary Tree Level Order Traversal(DFS||BFS)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- [LeetCode] Binary Tree Postorder Traversal dfs,深度搜索
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- Construct Binary Tree from Preorder and Inorder Traversal (DFS,参考)
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- bzoj 5195: [Usaco2018 Feb]Directory Traversal【树形dp】
注意到目录是一颗树结构,然后就简单了,预以1为根的处理出dis[u]为以这个点为根,到子树内的目录总长,si为子树内叶子数 第二遍dfs换根即可 #include<iostream> #i ...
- Directory traversal
Find the hidden section of the photo galery. 找到相册的隐藏部分. 直接能够目录遍历: 虽然galerie禁止访问,但是密码就在里面----直接爆破或者爬虫 ...
- Spring框架中文件目录遍历漏洞 Directory traversal in Spring framework
官方给出的描述是Spring框架中报告了一个与静态资源处理相关的目录遍历漏洞.某些URL在使用前未正确加密,使得攻击者能够获取文件系统上的任何文件,这些文件也可用于运行SpringWeb应用程序的进程 ...
随机推荐
- CSS 字体(font)实例
CSS 字体(font)实例CSS 字体属性定义文本的字体系列.大小.加粗.风格(如斜体)和变形(如小型大写字母).CSS 字体系列在 CSS 中,有两种不同类型的字体系列名称: 通用字体系列 - 拥 ...
- linux第二次读书笔记
<Linux内核设计与实现>读书笔记 第五章 系统调用 第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用 ...
- Linux内核分析作业第五周
系统调用的三个层次(下) 一.给MenuOS增加time和time-asm命令 1.克隆并自动编译 MenuOS rm menu -rf 强制删除原menu文件 git clone https://g ...
- jsp获取传过来的值
request.setCharacterEncoding("utf-8"); String credit=request.getParameter("credit&quo ...
- 使用msysgit上传项目到github
综合这几个教程,终于提价了项目,总结一下流程. (教程1[github入门教程]:http://jingpin.jikexueyuan.com/article/1037.html) (教程2[常见错误 ...
- Filter(转载)
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- 10-Python3从入门到实战—基础之函数
Python从入门到实战系列--目录 函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数的语法 def 函数名(参数列表): 函数体 函数代码块以 def 关键词开头 ...
- PHP常用类------生成验证码类Code
直接附上代码吧!很简单的代码,写一遍基本就会了,主要明白用GD库画图的几个步骤: 1.先创建画布,不然画在哪儿?(imagecreatetruecolor)2.根据要画的数据,选定颜色 (imagec ...
- router使用以及vue的动画效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- [转帖]知乎专栏:正确使用 Docker 搭建 GitLab 只要半分钟
正确使用 Docker 搭建 GitLab 只要半分钟 https://zhuanlan.zhihu.com/p/49499229 很多程序员在内网搭建 gitlab 都搭建的坑坑洼洼,不支持 htt ...