香港记者跑的比谁都快是众所周知的常识。

 
现在,香港记者站在一颗有  nn 个点的树的根结点上(即1号点),编号为  ii 的点拥有权值  a[i]a[i] ,数据保证每个点的编号都小于它任意孩子结点的别号。
 
我们假定这棵树的每个叶子结点都在发生一个大新闻,香港记者要用最少的耗时去报道其中的任意一个。
 
若香港记者目前处于第  ii 号点上,那么它可以移动至以  ii 为根的子树上的任意一点  jj ,耗时 a[i]+(j−i)pa[i]+(j−i)p ,p为给定常数。
 
请问这位香港记者搞哪个大新闻的耗时最短?所耗时间是多少?

Input第一行两个数n<=100000、p<=10,代表树上点的个数以及题中所提及的常数p。 
接下来n行,第i行有两个数字aii<10^6、faii <i,分别代表i号点的权值与i号点的父亲节点编号(根节点父亲编号为0)。

数据保证最短耗时不超过10^18.Output每组数据输出一行为最短耗时。Sample Input

10 2
833 0
2076 1
5759 1
5671 3
6642 2
3712 4
8737 1
5139 6
8800 1
6638 1

Sample Output

849

先谢谢Jessie Liu大佬的点拨。
题解:
  这个题目,我们先考虑一条链的情况,设dp[i]表示i这个节点到1节点的最小花费,那么dp[i]=dp[j]+cost[j~i],这个是十分显然的,所以在链上枚举i的每个前驱节点就可以。
  换成一棵树,因为一棵树是由很多条链来组成的,对于节点i,我们可以枚举每个祖先来j来dp,状态转移是一样的,但是具体怎么在树上枚举祖先呢?可以开一个栈记录一下所经过的深度的节点就看了。
  因为是指数函数,可以看出有决策单调性,那么就记一下父节点是从哪里转移的,从那里开始枚举就可以了。 代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 100100
#define ll long long
using namespace std;
struct edge{
int first;
int next;
int to;
}a[MAXN*];
ll dp[MAXN],node[MAXN],fa[MAXN],stk[MAXN],last[MAXN],ans=1ll<<;
int n,p,num=; void addedge(int from,int to){
a[++num].to=to;
a[num].next=a[from].first;
a[from].first=num;
} ll pw(ll base,int h){
ll ans=;
while(h){
if(h&) ans=ans*base;
base*=base;h>>=;
}
return ans;
} void dfs(int now,int dep){
stk[dep]=now;
for(int j=last[fa[now]];j<dep;j++){
ll cnt=dp[stk[j]]+node[stk[j]]+pw(now-stk[j],p);
if(dp[now]>cnt) dp[now]=cnt,last[now]=j;
}
int sz=;
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to;
if(to==fa[now]) continue;
sz++;
dfs(to,dep+);
}
if(!sz) ans=min(ans,dp[now]);
} int main()
{
scanf("%d%d",&n,&p);
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
scanf("%lld%lld",&node[i],&fa[i]);
addedge(i,fa[i]),addedge(fa[i],i);
}
dp[]=;
dfs(,);
printf("%lld",ans);
return ;
}

跑的比谁都快 51Nod - 1789的更多相关文章

  1. 51Nod 1781 跑的比谁都快

    香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 n 个点的树的根结点上(即1号点),编号为 i 的点拥有权值 a[i] ,数据保证每个点的编号都小于它任意孩子结点的别号. 我们假定这 ...

  2. BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主

    4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...

  3. [51nod1789] 跑得比谁都快

    题面 题解 设\(f[i]\)为根节点到\(i\)的最小耗时 设\(S\)为\(i\)的祖先集合, 可以得到 \[ f[i] = min(f[j] + (i - j)^p),j \in S \] 对于 ...

  4. iOS 1 到 iOS 10 ,我都快老了

    iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...

  5. jdk1.8新特性,还不知道的朋友还不看看,1.9都快出来了

    一.接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:代码如下:interface Formula {     ...

  6. 入坑IT都快十年了

    一起帮的开发直播已经告一段落:一是主体的功能差不多都实现了,二是用到的架构技术都展示得差不多了.以后就算继续开发,也应该都是一些“技术上”重复的工作而已.整个直播过程耗时近半年,SVN提交1062次, ...

  7. 今天我看了一个H5游戏EUI的例子,我都快分不清我到底是在用什么语言编译了代码了,作为刚刚学习H5游戏开发的菜鸟只能默默的收集知识

    今天看了一个EUI的demo,也是接触H5游戏开发的第五天了,我想看看我能不能做点什么出来,哎,自己写果然还是有问题的.在看EUI哪一个demo的时候就遇见了一些摇摆不定的问题,我觉得提出来 1.to ...

  8. Java9都快发布了,Java8的十大新特性你了解多少呢?

    Java 9预计将于今年9月份发布,这是否会是一次里程碑式的版本,我们拭目以待.今天,我们先来复习一下2014年发布的Java 8的十大新特性. Java 8可谓是自Java 5以来最具革命性的版本了 ...

  9. "迷途"的野指针,都快找不着北了

    指针,C语言开发者表示很淦,指针的使用,很多人表示不敢直面ta,不像Java一样,有垃圾自动回收功能,我们不用担心那么多内存泄漏等问题,那C语言里边呢,指针又分为了"野指针",&q ...

随机推荐

  1. 一起来读Netty In Action之netty的组件和设计(二)

    在上一篇博客中,我们给出了java高性能网络编程的技术基础,也简单的介绍了netty的核心构件,在这一篇博客中,我们将更加详细的研究netty的各个组件,并且密切关注它们是如何通过协作来支撑这些体系结 ...

  2. 代码质量检测(SonarQube)整合中文版+阿里P3C

    代码质量检测(SonarQube)整合中文版+阿里P3C 简介 SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味.它可以与您现有的工作流程集成,以便在项目分支和拉取请求之 ...

  3. 小白的消费为何被迫升级?-java数据类型的转换

    背景 小白最近有点烦恼,原因也很简单,不知道为何?小白的消费不知不觉被迫升级了,请看费用清单: for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; ...

  4. 在VMware中就显示lo回环IP:127.0.0.1的解决办法。

    在VMware时由于某些原因导致,在使用ifconfig只会显示lo,不显示其他的东西 步骤:1.sudo lshw -numeric -class network 2.sudo route -nv ...

  5. [中秋]宇宙第一 IDE Visual Studio 了解一下

    官网 https://visualstudio.microsoft.com/zh-hans/vs/ 文档 https://docs.microsoft.com/zh-cn/visualstudio/d ...

  6. SpannableString设置文本背景色

    参考内容: http://blog.csdn.net/harvic880925/article/details/38984705 http://blog.it985.com/14433.html 1. ...

  7. Hive中的数据库(Database)和表(Table)

    在前面的文章中,介绍了可以把Hive当成一个"数据库",它也具备传统数据库的数据单元,数据库(Database/Schema)和表(Table). 本文介绍一下Hive中的数据库( ...

  8. Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群

    一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...

  9. 获取contenteditable区域光标所在位置信息

    在我们使用contenteditable编辑时,有时需要光标位置的信息. <div contenteditable="true" style="min-height ...

  10. DirectX12 3D 游戏开发与实战第一章内容

    DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向 ...