CCPC-Winter Camp div2 day8 A
---恢复内容开始---
题目:
题解:
我们考虑第i个叶子节点的情况,根据题目给的输入条件,我们可以知道,深度大的节点的序号一定是大于深度浅的节点的序号的
如图
题目要求我们找出每一个叶子节点距离编号小于他的叶子节点的最小值
叶子节点很好找,就是树中出度为0的点,那么我们怎么找距离最近呢?
我们知道节点深度随着叶子节点的序号递增时递增,但是相邻的两个叶子节点的距离是否一定是最小的呢?显然不是的
我们需要求出最小距离
以这张图为例
对于点5,我们是找点5和点2的距离 dep[1,5]+dep[1,2]
对于点7,我们是找点7和点2的距离 dep[1,7]+dep[1,2]
对于点10,我们是找点10和点7的距离 dep[6,7]+dep[6,10]
聪明的你有没有看出来,实际上我们只是需要找到,叶子节点的lca点即可!
那么我们最短的距离一定是,从底至上更新信息,当推到根节点或者走过的点的时候,当前节点的信息就是,当前点,到距离他最近的叶子节点的距离
那么第i个叶子节点的答案就是
从当前节点向上dfs,直到找到根节点或者被标记的节点为止,然后回滚,更新每个节点到距离他最近的叶子节点的距离
得到答案就是这个被标记点的到距离这个被标记点最近的叶子节点的距离+当前叶子节点到被标记点的距离
由于我们是从编号最小的叶子节点开始枚举,我们不会计算重复的情况
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e6 + ;
int n, in[maxn], out[maxn], fa[maxn], minn[maxn], vis[maxn], ans[maxn];
int dfs(int u, int cnt, int id) {
if(vis[u]) {
ans[id] = minn[u] + cnt;
return minn[u] + ;
}
vis[u] = ;
minn[u] = min(cnt, dfs(fa[u], cnt + , id)); //更新从下往上的值还有从上往下的值
return minn[u] + ;
}
int main() {
scanf("%d", &n);
vis[] = ;
fa[] = ;
for(int v = ; v <= n; v++) {
int u;
scanf("%d", &u);
out[u]++;
fa[v] = u;
}
vector<int> vec;
for(int i = ; i <= n; i++) {
if(out[i] == ) {
vec.push_back(i);
}
}
minn[] = 1e9;
sort(vec.begin(), vec.end());
for(int i = ; i < vec.size(); i++) {
dfs(vec[i], , i);
}
ans[] = -;
for(int i = ; i < vec.size(); i++) {
printf("%d %d\n", vec[i], ans[i]);
} }
CCPC-Winter Camp div2 day8 A的更多相关文章
- CCPC Wannafly Winter Camp Div2 部分题解
Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...
- 2020 CCPC Wannafly Winter Camp Day1 C. 染色图
2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...
- 2019 wannafly winter camp
2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O ...
- 2019 wannafly winter camp day 3
2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉 ...
- 线段树优化建图(cf787d, 2019Wannafly Winter Camp Day7 Div1 E)
线段树优化建图,用于区间到区间建边时降低空间复杂度 建立两颗线段树,一颗in, 代表进入这个区间,一颗out,代表从这个区间出去 in树从父亲向儿子建边,代表宏观进入整个区间,不向下寻找 out树从儿 ...
- 2020 CCPC-Wannafly Winter Camp Day2
2020 CCPC-Wannafly Winter Camp Day2 A 托米的字符串 虽然每个子串出现的概率是相同的,但是同一长度的子串个数是不同的,所以要分别处理.计算出某一长度的情况下,元音字 ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
咕咕咕. camp补题. 传送门:https://www.zhixincode.com/contest/29/problems A.Aqours 题意:有一棵有根树,根节点为1,给出每个结点的父 ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)
题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题
A Aqours 题解: https://www.cnblogs.com/qieqiemin/p/11251645.html D:吉良吉影的奇妙计划 (暴力打表) 题目描述 吉良吉影是一个平凡的上班族 ...
随机推荐
- tensorflow模型持久化保存和加载--深度学习-神经网络
模型文件的保存 tensorflow将模型保持到本地会生成4个文件: meta文件:保存了网络的图结构,包含变量.op.集合等信息 ckpt文件: 二进制文件,保存了网络中所有权重.偏置等变量数值,分 ...
- 概要梳理kafka知识点
主要是梳理一下kafka学习中的一些注意点,按照消息的流动方向进行梳理.详细的kafka介绍推荐看骑着龙的羊的系列博客,具体的某一块的知识点,可以参考我给出的一些参考文章. 1. kafka在系统中的 ...
- idea clion编译器
RNMV64P0LA-eyJsaWNlbnNlSWQiOiJSTk1WNjRQMExBIiwibGljZW5zZWVOYW1lIjoiY24gdHUiLCJhc3NpZ25lZU5hbWUiOiIiL ...
- axis2调用webService几种方式
主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.q ...
- 定点数(fixed-point number)
定义 定点数(fixed-point number)就是小数点位置固定的数,也就是说,小数点后面的位数是固定的,比如要记录一笔账目,这些账目的数字都不会超过100,就可以使用2位小数位定点数来记录,比 ...
- Thunder团队第一周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...
- 第一章 Java Web应用开发技术
Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支 ...
- 大全Kafka Streams
本文将从以下三个方面全面介绍Kafka Streams 一. Kafka Streams 概念 二. Kafka Streams 使用 三. Kafka Streams WordCount 一. ...
- 【Docker 命令】- rm命令
docker rm :删除一个或多少容器 语法 docker rm [OPTIONS] CONTAINER [CONTAINER...] OPTIONS说明: -f :通过SIGKILL信号强制删除一 ...
- windows默认TEMP环境
留着是为了等出问题的时候能找着改回来 Administrator 的用户变量 TEMP %USERPROFILE%\AppData\Local\Temp TMP %USERPRO ...