####题目描述

q q q只乌鸦要坐机到同一个地方看阿福揍扁成龙!坐飞机就要到飞机场,一共 n n n个飞机场构成了一棵树,编号为 1 1 1到 n n n,其中 1 1 1号点是所有乌鸦的目的地,所以可以把飞机场的结构视为一棵以 1 1 1号点为根的有根树。坐飞机就要买飞机票,每个机场都只售 1 1 1种飞机票,我们用 v , d v,d v,d两个参数描述一张飞机票,表示这张飞机票售价为 v v v,可以让乌鸦飞到从当前机场到 1 1 1号机场的路径上距离不超过 d d d的任意 1 1 1个机场(两个机场的距离定义为两点之间简单路径上的边数)。
由于一些规定,一只乌鸦同时只能持有至多一张飞机票,每张飞机票只能使用一次。每只乌鸦都很理性,不在乎转多少趟飞机,只要总费用最少就行。请你计算每只乌鸦的最小总费用。


f [ x ] f[x] f[x]表示从 x x x号点出发到达根节点的最小总费用,那么转移如下( y y y是 x x x的祖先):
f [ x ] = m i n { f [ y ] } + v [ x ] f[x]=min\{f[y]\}+v[x] f[x]=min{f[y]}+v[x]

而如果我们暴力找出最小的 f [ y ] f[y] f[y]的话,时间复杂度在 O ( l o g 2 2 n ) − > O ( n 2 ) O(log_2^2n)->O(n^2) O(log22​n)−>O(n2)级别,超级不稳定,所以我们考虑优化求最小值的过程。

注意到这是在树上进行 D P DP DP,于是我们可以用倍增来维护这个最小值(作为一个连 S t St St表都用线段树代替的蒟蒻确实是第一次除了倍增 L C A LCA LCA以外写倍增了)。

代码实现其实就与倍增求 L C A LCA LCA十分类似了:

#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define LL long long
#define For(I,X,Y) for(LL I=(X);I<=(Y);I++)
#define ForDown(I,X,Y) for(LL I=(X);I>=(Y);I--)
using namespace std;inline LL Read(){LL X=0;char CH=getchar();bool F=0;while(CH>'9'||CH<'0'){if(CH=='-')F=1;CH=getchar();}while(CH>='0'&&CH<='9'){X=(X<<1)+(X<<3)+CH-'0';CH=getchar();}return F?-X:X;
}const LL Max=3e5+5;
const LL Inf=1e18;
LL DP[Max];
LL N,M,V[Max],D[Max];
LL Crow,Fa[Max][20],Dis[Max][20];
LL Cnt,To[Max<<1],Next[Max<<1],Head[Max];#define Update(X,Y) ((X)=(X)>(Y)?(Y):(X))
#define ReNew(X,Y,Z) ((X)=(Z)>(Y)?(Y):(Z))
#define Search(X,I) for(LL I=Head[X];I;I=Next[I])void Insert(LL X,LL Y){Cnt++;To[Cnt]=Y;Next[Cnt]=Head[X];Head[X]=Cnt;}void DFS(LL X){For(I,1,19) Fa[X][I]=Fa[Fa[X][I-1]][I-1],ReNew(Dis[X][I],Dis[X][I-1],Dis[Fa[X][I-1]][I-1]);if(X!=1){LL Loc=X,Delta=D[X];DP[X]=Inf;For(I,0,19){if(Delta&(1<<I)){Update(DP[X],Dis[Loc][I]);Loc=Fa[Loc][I];}}DP[X]+=V[X];}Search(X,I){LL Y=To[I];if(Y!=Fa[X][0]){Fa[Y][0]=X;Dis[Y][0]=DP[X];DFS(Y);}}
}int main(){N=Read();For(I,1,N-1){LL X=Read(),Y=Read();Insert(X,Y);Insert(Y,X);}For(I,1,N) V[I]=Read(),D[I]=Read();DFS(1);M=Read();For(I,1,M) printf("%lld\n",DP[Read()]);return 0;
}

NKOJ 4974 「NOIP模拟」乌鸦坐飞机【倍增优化DP】相关推荐

  1. zcmu-1957: 乌鸦坐飞机

    1957: 乌鸦坐飞机 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 83 Solved: 6 [Submit][Status][Web Board] ...

  2. Problem F: 乌鸦坐飞机

    Problem F: 乌鸦坐飞机 Time Limit: 2 Sec   Memory Limit: 128 MB Submit: 110   Solved: 9 [ Submit][ Status] ...

  3. Libre OJ 「BalticOI 2013」非回文数 数位dp

    传送门 文章目录 题意: 思路: 题意: 问[l,r][l,r][l,r]内有多少个数是非回文数,即数字中不存在连续几个数为回文数. l,r≤1e18l,r\le1e18l,r≤1e18 思路: 这么 ...

  4. 集训前一周(乌鸦坐飞机)

    以下内容来自:老刘上课开的飞机.课本 感谢:刘神.岳神.吾大海亮 为准备即将到来的激动人心的集训,刘神强行给我们拉进度条,半天上(据说)人家一个月课程,这飞机坐的我(贼爽) 虽然老师一再强调不用担心, ...

  5. 「NOIP 2013」 货车运输

    题目链接 戳我 \(Solution\) 这一道题直接用\(kruskal\)重构树就好了,这里就不详细解释\(kruskal\)重构树了,如果不会直接去网上搜就好了.接下来讲讲详细过程. 首先构建\ ...

  6. 【NOIP模拟】T2 管道(状压dp求图的dfs序方案数)

    f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态 dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的 ...

  7. 「ROI 2017 Day 2」反物质(单调队列优化dp)

    problem LOJ2772 solution 这道题求的是"保证最多",这个"保证"真的屑啊! 因为我们无法确定实验生成的克数,所以我们应当计算的是最坏情况 ...

  8. seo代码优化工具_谁是「南京SEO」搜索引擎网站关键词排名优化专家

    千矩网络公司一直致力于网站运营.网络整合营销.互联网赢利模式.电子商务.搜索引擎优化(SEO)等方面研究工作,提供专业网络推广.seo优化.百度优化.网站优化.整站优化.网络营销.网站推广.关键词优化 ...

  9. 一口气搞懂「Flink Metrics」监控指标和性能优化,全靠这33张图和7千字(建议收藏)

    前言 大家好,我是土哥. 最近在公司做 Flink 推理任务的性能测试,要对 job 的全链路吞吐.全链路时延.吞吐时延指标进行监控和调优,其中要使用 Flink Metrics 对指标进行监控. 接 ...

最新文章

  1. huggingface实操_盘点2018年度GtiHub开源项目TOP 25
  2. oracle数据库增加新字段
  3. 扩增子分析解读7物种分类统计,筛选进化树和其它
  4. 微软考虑将 Python 作为 Excel 官方脚本语言
  5. numpy.eye详解
  6. 详解如何使用Istio监控基于容器的服务
  7. 处理数字_1_计算某列的最小/大值
  8. Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含……。编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间
  9. 与大家分享一个我最近开始用的不错的JavaScript IDE
  10. 验证gpu版pytorch是否可用
  11. 长按UIWebView上的图片保存到相册
  12. java与数据库连接教程_Java与数据库连接教程
  13. 不登陆QQ也能使用QQ截图工具
  14. vue实现关系图(组织机构图谱)
  15. 完全限定域名(fully qualified domain name,FQDN,笔记)
  16. 差错控制之检错编码与纠错编码
  17. 大数据HBase在阿里搜索中的应用实践
  18. 案例3 淘宝点击关闭二维码
  19. DDD为什么能火起来?DDD 与微服务到底是啥关系!
  20. (简单有效)小米设备怎么样不ROOT激活Xposed框架

热门文章

  1. 关于Cocos2D-X 3.10在android平台上使用外接键盘无法响应的问题
  2. java线程怎么重启_如何在Java中启动/停止/重启线程?
  3. 出现The import javax.servlet cannot be resolved 的解决方法
  4. 引发线程安全的原因是什么?怎么解决?程序员一定要掌握的东西
  5. 【c语言·镂空三角形】
  6. 阿里躺平设计家:“人货场”变迁下的家居数智转型
  7. win10 系统备份服务器,Windows10系统备份重要文件的详细步骤
  8. iapp悬浮窗权限代码
  9. Python之字典方法的相关操作—fromkeys、get、items、keys、values、pop、popitem、setdefault、update
  10. Java基础之---- 集合(一)List