想象一下(imagine)

题目描述

我们高大的老班举起了有半个他那么高的三角板,说:“你们想象一下——”

于是你就陷入了想象……

有一棵n个点的树,每个叶子节点上都有一个人,他们按照每秒钟走一条边的速度向树根(节点1)前进。

你可以运用k次想象之力,让某一个节点(除了根节点)上的所有人瞬间(耗时为0)转移到这个节点的父亲上。

你想知道最少需要多少时间,所有人可以到达根节点。

输入

输入的第一行包含两个整数n,k,含义见问题描述。

接下来n-1行,第i行一个整数fai,表示节点i的父亲为fai。

输出

输出一行一个整数,表示所有人到达根节点最少需要的时间。

样例输入

<span style="color:#333333"><span style="color:#333333">【样例1输入】
6 2
1
2
2
2
4
【样例2输入】
3 2
1
2 </span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">【样例1输出】
1
【样例2输出】
0</span></span>

提示

【样例1说明】

一开始,在节点3,5,6上分别有一个人,我们称他们为A,B,C。

时刻0,在节点6运用想象之力,A到达节点4。

第1秒,A,B,C走到节点2。

时刻1,在节点2运用想象之力,A,B,C到达节点1,即目的地。

共用时1秒。

【样例2说明】

一开始只有节点3上有一个人。

时刻0,在节点3运用想象之力,这个人到达节点2;

此时仍然为时刻0,在节点2运用想象之力,这个人到达节点1。

【子任务】

测试点

n

k

特殊性质

1

≤8

<n

2~4

≤100

5~8

≤3000

9

≤500000

=1

10

<n

树是一条链

11~20


solution

考场时的想法:答案是有单调性的,那我二分一个mid,然后把所有点往上跳mid步

在用树形dp看看是否合法

效率O(nlog2) 90分

然而这题有O(n)做法

贪心把所有叶子往上跳,如果剩下的边不足k条,就break

因为想象应该越晚用越好(一次拉多个)

好吧说实话我也不太会证

1.一个节点最多只会使用1次想象之力(当最后一个人经过它的时候)
2.对于一个人来说,对他用的想象之力一定越靠近根越好(尽可能多的与其它点共用)。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define maxn 500005
using namespace std;
int n,K,f[maxn],flag[maxn],s[maxn],ans;
struct node{
int x,bs;
};
queue<node>q;
int main(){
cin>>n>>K;
for(int i=2;i<=n;i++){
scanf("%d",&f[i]);
s[f[i]]++;
}
for(int i=1;i<=n;i++)if(!s[i])q.push(node{i,0});
int sum=n-1;if(K==sum){puts("0");return 0;}
while(!q.empty()){
node a=q.front();q.pop();
sum--;if(sum<=K){ans=a.bs+1;break;}
s[f[a.x]]--;
if(!s[f[a.x]]){
node ne;ne.x=f[a.x];ne.bs=a.bs+1;
q.push(ne);
}
}
cout<<ans<<endl;
return 0;
}

想象一下(imagine)的更多相关文章

  1. 强化学习之五:基于模型的强化学习(Model-based RL)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  2. J.K.罗琳女士---《失败的好处和想象的重要性》

    目录 sohu ruanyifeng web sohu http://www.sohu.com/a/166181502_467718 <哈利波特>的作者J.K.罗琳女士在出席一次哈佛大学的 ...

  3. GDAL生成Erdas Imagine

    GDAL原生支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括•  ArcInfo grids, ArcSDE raster, Imagine, Idrisi, ENVI, GRAS ...

  4. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  5. EF并非我们想象的那么智能

    我之前在项目中用EF读取一个视图的数据,页面展示出现重复数据,当时百思不得其解,跟踪代码,数据读取时取到的数据并不是重复,为什么在前台显示就有重复了呢,我当时就在业务层将数据去重,但取到的数据跟数据库 ...

  6. 充满想象力的 JavaScript 物理和重力实验

    在这个列表中挑选了9个物理和重力实验,用来展示 Javascript 的强大.几年前,所有这些实验都必须使用 Java 或 Flash 才能做.在下面这些惊人的例子中,就个人而言,我比较喜欢仿真布料的 ...

  7. 重新想象 Windows 8 Store Apps 系列文章索引

    [源码下载][重新想象 Windows 8.1 Store Apps 系列文章] 重新想象 Windows 8 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  8. 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo

    [源码下载] 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo 作者:webabcd 介绍重新想象 Wind ...

  9. 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解

    [源码下载] 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Toa ...

随机推荐

  1. CentOS替换系统自带JDK

    1.解压jdk安装包到/opt 下 /opt/jdk1.8.0_181 2.编辑/etc/profile, 增加如下内容 export JAVA_HOME=/opt/jdk1.8.0_181expor ...

  2. sqlldr将txt导入oracle数据库

    注意事项: 1.userid 和 control关键字不要缺少: 2.注意数据库格式:test/test@数据库IP:1521/Oracle8,最后一个是tnsnames中的service_name, ...

  3. c# 科学计数法值转换成正常值,返回字符串

    /// <summary> /// 科学计数法值转换成正常值 /// </summary> /// <param name="value">&l ...

  4. java 字符串中是否有数字

    http://www.cnblogs.com/zhangj95/p/4198822.html http://www.cnblogs.com/sunzn/archive/2013/07/12/31865 ...

  5. 循环 -----JavaScript

    本文摘要:http://www.liaoxuefeng.com/ JavaScript的循环有两种,一种是for循环,通过初始条件.结束条件和递增条件来循环执行语句块: var x = 0; var ...

  6. 更改 Linux 语言为中文

    查看当前系统语言环境:    echo $LANG 查看安了哪些中文语言包    locale -a |grep "zh_CN" 没有输出,说明没有安装,输入下面的命令安装     ...

  7. mysql 查询出 n小时 以前的数据

    select * FROM biaoming WHERE TIMESTAMPDIFF(SECOND ,CREATE_TIME,now() ) > 3*60*60

  8. js数组中去重对象

    var allCourses = new Array();var coursesId = new Array();function findCourses() { Courses.data().eac ...

  9. python之质数

    质数(prime number)又称素数,有无限个 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 示例: num=[]; i=2 for i in range(2,100): j= ...

  10. 关于poi的坑

    背景故事 今天遇上一个坑,关于poi公式计算结果出错的问题,自己打断点debug了半天,虽然没彻底搞清楚为啥不行,但所幸找到了解决办法. 干货 下面不废话,直接贴干货,原先的公式处理代码如下: fin ...