「APIO2016」烟花表演

解题思路

又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的。

首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \(u\) 距离为 \(i\) 的最少代价,显然有
\[ dp[u][i]=\sum_{v\in son(u)}\min_{0\leq j \leq i}\{dp[v][j]+|C(u,v)-(i-j)|\} \]
定义函数
\[ f_u(x)=dp[u][x] , g_u(x)= \min_{0\leq i\leq x}\{dp[u][x]+|C(fa[u],u)-(x-i)|\} \]
可以得到 \(f_u(x) = \sum_{v \in son(u)} g_v(x)\) 。

不难证明,\(f,g\) 的图像都是一个下凸包,且相邻的段之间斜率变化为 \(1\) ,考虑由 \(f_u(x)\) 到 \(g_u(x)\) 的过程

令 \(L, R\) 为 \(f_u\) 最下面那条边的左右端点,\(len=C(fa[u],u)\) ,把过程看做对图像的操作,那么有:
\[ g_u(x)= \begin{cases} f_u(x)+len& x<L \\ f_u(L)+len-(x-L) &L\leq x<L+len \\ f_u(L) & L + len \leq x\leq R+len \\ f_u(R)+(x-R)-len & x>R+len \end{cases} \]
考虑维护这个凸包的拐点,1,2,3操作合起来相当于删除凸包上 \(L,R\) 两个拐点,然后插入 \(L+len,R+len\) 这两个拐点。

4操作只需要在之前把斜率 \(\geq1\) 的拐点删除到只剩一个即可,不难证明对于非叶子节点,这样的拐点只有儿子数量 \(-1\) 个,删完之后要找的 \(L,R\) 就是当前最右边的两个拐点。

那么对于每一个 \(u\) 只需要将所有儿子的 \(g\) 合并起来即可得到当前的 \(f\) ,可并堆/线段树合并实现都是 \(\mathcal O((n+m)\log n)\)。

我们维护出来 \(f_1\) 的所有拐点之后,求答案只需要用 \(f_1(0)\) 的值减去所有斜率 \(\leq0\) 的拐点的横坐标即可。

code

/*program by mangoyang*/
#include <bits/stdc++.h>
#include <ext/pb_ds/priority_queue.hpp>
#define inf (0x7f7f7f7f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
template <class T>
inline void read(T &x){int f = 0, ch = 0; x = 0;for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
}
const int N = 1000005;
ll ans;
int fa[N], len[N], deg[N], n, m;
__gnu_pbds::priority_queue<ll> pq[N];
int main(){read(n), read(m);for(int i = 2; i <= n + m; i++){read(fa[i]), deg[fa[i]]++;read(len[i]), ans += len[i];}for(int i = n + m; i > 1; i--){ll x = 0, y = 0;if(i <= n){for(int j = 1; j < deg[i]; j++) pq[i].pop();x = pq[i].top(), pq[i].pop();y = pq[i].top(), pq[i].pop();}pq[fa[i]].push((ll) x + len[i]);pq[fa[i]].push((ll) y + len[i]);pq[fa[i]].join(pq[i]);}   for(int i = 1; i <= deg[1]; i++) pq[1].pop();while(!pq[1].empty())ans -= pq[1].top(), pq[1].pop();cout << ans << endl;return 0;
}

转载于:https://www.cnblogs.com/mangoyang/p/10840745.html

「APIO2016」烟花表演相关推荐

  1. Loj #2568. 「APIO2016」烟花表演

    Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...

  2. 【LOJ】#2568. 「APIO2016」烟花表演

    题解 这个听起来很毒瘤的想法写起来却非常休闲,理解起来可能很费劲 例如,我们首先到猜到答案是个下凸包 然后是不是要三分???然而并不是orz 我们通过归纳证明这个下凸包的结论来总结出了一个算法 也就是 ...

  3. [LOJ2568][可并堆]APIO2016:烟花表演

    LOJ2568 按照这类折线题的套路,我们分析加入一个点引起的图像变化 设f(x)f(x)f(x)表示最终长度为xxx的最小代价 则需要考虑一个点的儿子对它有什么影响 显然f(x)f(x)f(x)为斜 ...

  4. 「APIO2016」划艇 (dp+组合数+区间离散化)(考试)

    题干: 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 N 个划艇学校,编号依次为 1 到 N.每个学校都拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同. ...

  5. 删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!

      视学算法报道   编辑:好困 袁榭 [新智元导读]在开源程序界惹出「删库跑路」大新闻的开发者Marak Squires,最近发声:「人无完人,编程错误而已,GitHub你就不用再封我号了嘛!」 2 ...

  6. 「傻瓜」才能写出好代码!

    作者 | Esteban Gabriel 译者 | 弯月 责编 | 仲培艺 出品 | CSDN(ID:CSDNnews) 我觉得自己没有想象中那么聪明,而且还是一个健忘的人.正因如此,我写的代码才能一 ...

  7. 「视频」重磅 | Magic Leap再发Demo,凯文·凯利万字长文揭秘

    Magic Leap 令人迷幻的技术透露出哪些有关虚拟现实未来的信息? 编者按:本文作者 Kevin Kelly,由机器之心编译:参与者:周亮.chenxiaoqing.吴攀.Ruby.李亚洲.夏梦 ...

  8. 良好的研发团队文化是怎样「长」成的?一句成功的十四字真言!

    http://mp.weixin.qq.com/s/fzBDkwaJPzGUr2bg0Th6IQ 从死气沉沉到激情活力,从固步自封到好学分享,这是一个有关团队文化的主题.寺庙文化传承千百年,舌尖上的美 ...

  9. 公开「处刑」!波士顿动力的搬砖机器人,私下竟「翻车」不断

    编辑 | 汽车人 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 [导读]如何让一个机器人尴尬?波士顿动力发布Atlas失误集锦,全网围观机器人翻车的各种样子 ...

最新文章

  1. php 开源 流量统计,5款开源的PHP网站流量统计应用程序
  2. Cisco2620路由器的密码恢复和灾难性恢复
  3. 没有密码直接进入mysql
  4. reactjs大列表大表格渲染组件:react-virtualized
  5. Nginx-rtmp直播之业务流程分析--比较详细
  6. 数据挖掘之关联分析五(序列模式)
  7. java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析
  8. 51单片机实现c语言字母滚动,基于51单片机的led点阵滚动显示上下左右c语言程序.docx...
  9. SSM中(Spring-SpringMVC-Mybatis)(二:整合)
  10. HDU2019 数列有序!
  11. 在Flex中获取一个屏幕截图(Screenshot)并将其传递给ASP.NET
  12. 使用Nexus搭建Maven仓库
  13. 怎么做分布式存储的面试?
  14. 《HTML and CSS Design and Build Websites》学习笔记之HTML5表单新增功能
  15. graphpad做单因素方差分析_手把手教你用Graphpad做单因素方差分析
  16. 在2a期概念验证研究取得积极结果后,武田获得COUR Pharmaceuticals治疗乳糜泻的同类首创药物的许可
  17. MySQL 中的boolean/bool/tinyint(1)表示布尔类型
  18. 学大伟业(杭州分校)数学联赛 GA3-1 国奥专题班
  19. 【Redis学习05】优惠券秒杀及其优化
  20. web页面之弹出窗口

热门文章

  1. Python(贪心算法)问题 C: 活动选择_学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。
  2. 淘宝天猫CTO若海:沉浸式的消费体验是下一步发力方向
  3. 类的静态成员与静态成员函数
  4. 系统运维架构 DevOps
  5. 中小型运维团队如何设计运维自动化平台
  6. [树莓派]基于Python开发树莓派软件流程
  7. wince+labview+ARM的便携式设备
  8. 全志T507操作小技巧连载1-T507屏幕切换的两种方式
  9. Java中2.5D游戏(斜45度角)的设计与实现(1)
  10. 如何将自己的网页上传让别人都可以搜索到,如何建站