A Aqours

链接

分析:

  给出的点可以视为是按照BFS序给的,也就是说从浅到深给出。可以再给每个节点u维护一个f值,表示离u最近的叶子节点到它的距离。

  所以每当扫到一个叶子节点,就可以暴力往根节点跳,边跳边更新f值,直到跳到一个已被其他叶子节 点跳到过的节点为止。 那么对于当前的叶子节点,离它最近的编号小于它的叶子节点到它的距离就是跳到这个终止节点的f值 +跳的步数。

  在求完之后,还要从上述的终止节点沿着原路更新一下f值,因为可能当前叶子比较深但之前有比较浅 的叶子节点。

  因为点是按从浅到深的顺序给出,所以一个节点的f值只会被最先跳到它的叶子节点赋值一次,也只会 被更新一次,所以复杂度是 O(n) 的。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
#define pa pair<int,int>
#define Fi first
#define Se second
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; int g[N], isleaf[N], d[N], fa[N], ans[N]; int main() {
int n = read();
if (n == ) { printf("1 -1"); return ; }
for (int i = ; i <= n; ++i) isleaf[i] = ;
for (int i = ; i <= n; ++i) {
fa[i] = read();
isleaf[fa[i]] = ;
d[i] = d[fa[i]] + ;
}
for (int i = ; i <= n; ++i) g[i] = 1e9;
bool fir = ;
for (int i = ; i <= n; ++i) {
if (!isleaf[i]) continue ;
int x = i, y;
g[x] = ;
while (fa[x]) {
if (g[fa[x]] == 1e9) {
g[fa[x]] = g[x] + ;
x = fa[x];
ans[i] ++;
}
else {
ans[i] += g[fa[x]] + ;
break;
}
}
if (!fir) { printf("%d -1\n", i), fir = ; continue; }
else printf("%d %d\n", i, ans[i]); y = fa[x], x = i;
while (x != y) {
g[x] = min(g[x], g[y] + d[x] - d[y]);
x = fa[x];
}
}
return ;
}

Comet OJ CCPC-Wannafly Winter Camp Day8 A Aqours的更多相关文章

  1. 2020 CCPC Wannafly Winter Camp Day1 C. 染色图

    2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...

  2. CCPC Wannafly Winter Camp Div2 部分题解

    Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...

  3. Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的 ...

  4. 2020 CCPC Wannafly Winter Camp Day1 Div.1&amp F

    #include<bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, ...

  5. 2020 CCPC Wannafly Winter Camp Day1 - I. K小数查询(分块)

    题目链接:K小数查询 题意:给你一个长度为$n$序列$A$,有$m$个操作,操作分为两种: 输入$x,y,c$,表示对$i\in[x,y] $,令$A_{i}=min(A_{i},c)$ 输入$x,y ...

  6. 2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信

    题目传送门 sol:先通过AC自动机构建字典,用$dp[i]$表示长串前$i$位的最小代价,若有一个单词$s$是长串的前$i$项的后缀,那么可以用$dp[i - len(s)] + val(s)$转移 ...

  7. 2020 CCPC Wannafly Winter Camp Day1-F-乘法

    题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个.关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的.感觉写着有点困难,自己写了一 ...

  8. 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 ...

  9. 2019 wannafly winter camp day 3

    2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉 ...

随机推荐

  1. android-eclips中logcat不显示信息的问题解决

    time:2015/11/20 1. logcat窗口不显示问题 解决: 参考[1] 2. logcat中不显示信息 (1)红米手机 (2)解决问题 * 有些文章提到重启eclipse,或者重启手机. ...

  2. lumen框架的辅助函数

    简介 Laravel 包含一些多样化的 PHP 辅助函数函数.许多在 Laravel 自身框架中使用:如果你觉得实用,也可以在你应用当中使用. 可用方法 数组 array_add array_coll ...

  3. HBase性能优化 Java Api

    1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时 ...

  4. Sublime Text 3中文乱码

    Sublime Text 3是很好的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开GBK的代码文件,如果里面有中文的话,就会乱码,如下所示: ...

  5. impala jdbc驱动执行impala sql的一个坑(不支持多行sql)

    架构使用spark streaming 消费kafka的数据,并通过impala来插入到kudu中,但是通过对比发现落地到kudu表中的数据比kafka消息数要少,通过后台日志发现,偶发性的出现jav ...

  6. Payment:微信支付配置文件设置说明

    项目GitHub地址:https://github.com/helei112g/payment 微信支付个人觉得在帐号设置上有些麻烦,帐号太多啦,支付宝目前就是一个应用基本涵盖了所有的接口开发. 可能 ...

  7. ethers.js-4-Contracts

    Contracts A Contract is an abstraction of an executable program on the Ethereum Blockchain. A Contra ...

  8. php后台+前端开发过程整理

    一.PHP后台从数据库中获取数据 1. 建立数据库连接: //在本项目中封装了数据库的各种操作 $dbConn = $this->_createMysqlConn(); 2. 执行sql语句 $ ...

  9. Docker+Kubernetes(k8s)微服务容器化实践

    第1章 初识微服务微服务的入门,我们从传统的单体架构入手,看看在什么样的环境和需求下一步步走到微服务的,然后再具体了解一下什么才是微服务,让大家对微服务的概念有深入的理解.然后我们一起画一个微服务的架 ...

  10. jdbc java程序连接数据库 案例

    package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; ...