[vijos1427]机密信息
Description
有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的你一定想到了,
的信息都是以文件夹名称的形式保存的。
给机密盘中的每一个文件夹都编了号,而
的机密信息是由
文件夹转到
文件夹的过程中必须经过的文件夹名称组合而成的(包括
和
),由于
的磁盘很慢,打开每个文件夹所耗费的时间等于该文件夹内下一级文件夹的数量。这次的任务是,给出每个文件夹的编号、名称以及它的父目录的编号和隐藏了
机密信息的起始文件夹编号和终点文件夹编号,你要计算出来的是
机密信息的长度以及寻找这个机密信息所需要的总时间。
Input
输入文件的第一行为个整数
,分别代表文件夹的个数、起始文件夹编号、终点文件夹编号.
接下来行,每行有
个整数
和
个字符串
(不包含空格),用空格分开,
是
号文件夹的父目录编号(为
时表示该文件夹为根目录下的一级文件夹),
是
号文件夹的名称.
Output
输出文件共行,第一行是
的机密信息的长度,第二行是所消耗的时间.
Sample Input
6 1 5
1 2 Lo
2 3 ra
3 0 .
4 3 bi
5 4 t
6 5 .COM
Sample Output
8
4
HINT
,保证一定有解.
假设你一开始就在初始文件夹位置,此时耗费的时间为0;你每打开一个文件夹,能够知道的文件夹名除了当前这个文件夹名之外,还有该文件夹内下一级的文件夹名.
Solution
这道题就是裸的...
记录打开根节点到
的路径上的文件夹所需时间和.
记录根节点到
的路径上的文件夹名称长度和.
只是有以下细节需要注意:
对于,不需要算
的打开时间;有可能
在一条链上.
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define K 15
#define M 305
#define N 10005
using namespace std;
struct graph{
int nxt,to;
}e[N];
int f[N][K],g[N],len[N],tim[N],fa[N],dep[N],n,s,t,cnt;
char c[M];stack<int> sta;
inline void addedge(int x,int y){
e[++cnt].nxt=g[x];g[x]=cnt;e[cnt].to=y;
}
inline void dfs(int r){
int u;dep[r]=;sta.push(r);
for(int i=;i<K;++i)
f[r][i]=r;
while(!sta.empty()){
u=sta.top();sta.pop();
if(u!=r) for(int i=;i<K;++i)
f[u][i]=f[f[u][i-]][i-];
for(int i=g[u];i;i=e[i].nxt){
f[e[i].to][]=u;
sta.push(e[i].to);
tim[e[i].to]+=tim[u];
len[e[i].to]+=len[u];
dep[e[i].to]=dep[u]+;
}
}
}
inline int swim(int x,int h){
for(int i=;h;i++,h>>=)
if(h&) x=f[x][i];
return x;
}
inline int lca(int x,int y){
if(dep[x]<dep[y]){
int tem=x;x=y;y=tem;
}
x=swim(x,dep[x]-dep[y]);
if(x==y) return x;
int i;
while(true){
for(i=;f[x][i]!=f[y][i];++i);
if(!i) return f[x][];
x=f[x][i-];y=f[y][i-];
}
}
inline void init(){
scanf("%d%d%d",&n,&s,&t);
for(int i=,j,k;i<=n;++i){
scanf("%d%d%s",&j,&k,c);
addedge(k,j);
len[j]=strlen(c);
++tim[k];fa[j]=k;
}
tim[]=;dfs();
int k=lca(s,t);
if(s==t) printf("%d\n%d\n",len[s],);
else if(k==s) printf("%d\n%d\n",len[s]+len[t]-len[k]-len[fa[k]],tim[fa[t]]-tim[s]);
else if(k==t) printf("%d\n%d\n",len[s]+len[t]-len[k]-len[fa[k]],tim[fa[s]]-tim[fa[t]]);
else printf("%d\n%d\n",len[s]+len[t]-len[k],tim[fa[s]]+tim[fa[t]]-tim[k]);
}
int main(){
freopen("folder.in","r",stdin);
freopen("folder.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}
[vijos1427]机密信息的更多相关文章
- 怎么保护PDF文档和扫描文件里的机密信息
从事商务工作的人,必然要处理带有机密信息的文档,需要分享这些文档的时候,如何谨慎小心地对待那些机密信息,说到底还是取决于自己.分享文档的目的不同,对文档的保护类型和级别也不一样.例如,只有授权的读者才 ...
- 清除PDF里的元数据和机密信息的方法
相信很多人都知道,PDF文档的表现形式可以大不相同,它们可能包含某些数据,乍一看根本看不见,那些数据可能是不适合共享的信息-比如元数据(作者.主题.关键词).书签.扫描文档里的文本层等,通过ABBYY ...
- Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息
一,引言 Azure 密钥保管库用于存储敏感信息,例如链接字符串,密码,API 密钥等.我们无法直接从Azure 密钥库中访问机密!那么我们如何才能访问应用程序中的机密信息?比如,在我们的实际项目中, ...
- 在外围获取APP的机密信息
叶孤城原创,转载须授权. 小白:偷窥狂,不,叶城主,怎么还不发起攻击,还在外围搞什么? 叶孤城:闭嘴,能外围解决的问题就不要破解,你以为你会天外飞仙啊! 小白:-- 本文解决一个问题:通过抓包分析出重 ...
- 用 k8s 管理机密信息 - 每天5分钟玩转 Docker 容器技术(155)
应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储 ...
- k8s应用机密信息与配置管理(九)--技术流ken
secret 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以 ...
- K8s管理机密信息
1. 启动应用安全信息的保护 Secret介绍 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...
- kubernetes第九章--管理机密信息
- k8s管理机密信息(9)
一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...
随机推荐
- Ninject 学习杂记
IOC容器的DI实现并不依赖于方法调用拦截,而是通过DI容器内部自己通过反射的方式生成需要的类型实例,并调用实例的成员.然后再把实例返回给容器外部环境使用. Ninject本身及其扩展库,还针对特定的 ...
- 安装Docker Toolbox后出现的问题
Installing Docker Toolbox on Windows with Hyper-V Installed Installing Docker on Windows is a fairly ...
- 通用权限管理系统数据字典 V3.9 版本,欢迎开发个各种业务系统的朋友们,参考表结构
C#.NET通用权限管理系统组件数据字典 导 航 ◇ (01) BaseItemDetails ◇ (02) BaseItems ◇ (03) BaseLog ◇ (04) BaseMessage ...
- java的守护线程与非守护线程
最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...
- Java 密码扩展无限制权限策略文件
因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制.比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件. 官方网站提供了JCE无限制权限策略文件的下载: ...
- PAT1078 Hashing
11-散列2 Hashing (25分) The task of this problem is simple: insert a sequence of distinct positive in ...
- HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
关于Vuforia,开发AR应用的人基本都会熟悉.之前我也写过一篇关于Vuforia开发的博客:Vuforia AR SDK入门 今天这篇博客则主要是谈谈HoloLens使用Vuforia开发混合现实 ...
- ionic —— 开发环境搭建并编译运行第一个APP
其实类似的环境已经玩了很多次了,最开始玩还是微信刚刚出来,那会儿没有智能机.只好安装一个模拟器,却只是为了注册一个微信.想想也就是够了~ 前前后后折腾了很多次,可是每一次都给人不一样的感觉,也许是这个 ...
- 仿造slither.io第二步:加个地图,加点吃的
前言 上一篇博文讲了如何造一条蛇,现在蛇有了,要让它自由的活动起来,就得有个地图啊,而且只能走也不行呀,还得有点吃的,所以还得加点食物,这一篇博文就来讲讲如何添加地图和食物. 预览效果 当前项目最新效 ...
- NPOI2.0学习(三)
HSSFWorkbook wk = new HSSFWorkbook();//你用来操作的HSSFWorkbook的实例 ICellStyle cellStyle = wk.CreateCellSty ...