bzoj 1767: [Ceoi2009]harbingers
Description
Input
f[w]=W[w]+V[w]*dep[w]+min(f[u]-dep[u]*V[w]) u在w到根的路径上
树上的斜率优化,两维分别是深度dep和答案f,dfs并用单调栈记录当前点到根路径上的凸包,三分得到决策点
为保证时间复杂度,单调栈pop时要用二分确定弹出的元素个数,并支持撤销
#include<cstdio>
typedef long double ld;
typedef long long i64;
const int N=;
int n,es[N*],enx[N*],ev[N*],e0[N],ep=;
int c[N],v[N],ss[N],sp=;
i64 f[N],dep[N];
int _(){
int x;
scanf("%d",&x);
return x;
}
bool chk(int a,int b,int w){
return (f[b]-f[a])/ld(dep[b]-dep[a])>(f[w]-f[b])/ld(dep[w]-dep[b]);
}
void f1(int w,int pa){
if(sp){
int L=,R=sp,M;
while(L<R){
M=(L+R)>>;
int a=ss[M],b=ss[M+];
if(f[a]-f[b]<v[w]*(dep[a]-dep[b]))R=M;
else L=M+;
}
f[w]=c[w]+v[w]*(dep[w]-dep[ss[L]])+f[ss[L]];
}
int L=,R=sp,M;
if(L<R&&!chk(ss[R-],ss[R],w))L=R;
while(L<R){
M=(L+R)>>;
if(chk(ss[M],ss[M+],w))R=M;
else L=M+;
}
L=sp;
M=ss[sp=R+];
ss[sp]=w;
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
if(u==pa)continue;
dep[u]=dep[w]+ev[i];
f1(u,w);
}
ss[sp]=M;
sp=L;
}
int main(){
n=_();
for(int i=,a,b,c;i<n;++i){
a=_();b=_();c=_();
es[ep]=b;enx[ep]=e0[a];ev[ep]=c;e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];ev[ep]=c;e0[b]=ep++;
}
for(int i=;i<=n;++i){
c[i]=_();
v[i]=_();
}
f1(,);
for(int i=;i<=n;++i)printf("%lld%c",f[i],i==n?:);
return ;
}
bzoj 1767: [Ceoi2009]harbingers的更多相关文章
- BZOJ 1767] [Ceoi2009] harbingers (斜率优化)
[BZOJ 1767] [Ceoi2009] harbingers (斜率优化) 题面 给定一颗树,树中每个结点有一个邮递员,每个邮递员要沿着唯一的路径走向capital(1号结点),每到一个城市他可 ...
- ●BZOJ 1767 [Ceoi2009]harbingers
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1767 题解: 斜率优化DP,单调栈,二分 定义 DP[i] 表示从 i 节点出发,到达根所花 ...
- bzoj1767[Ceoi2009]harbingers 斜率优化dp
1767: [Ceoi2009]harbingers Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 421 Solved: 112[Submit][S ...
- [Bzoj1767][Ceoi2009]harbingers (树上斜率优化)
1767: [Ceoi2009]harbingers Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 451 Solved: 120[Submit][S ...
- BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分
传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...
- BZOJ1767 : [Ceoi2009]harbingers
设d[i]表示i到1的距离 f[i]=w[i]+min(f[j]+(d[i]-d[j])*v[i])=w[i]+d[i]*v[i]+min(-d[j]*v[i]+f[j]) 对这棵树进行点分治,每次递 ...
- ●BZOJ 3672 [Noi2014]购票
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3672 题解: 斜率优化DP,点分治(树上CDQ分治...) 这里有一个没有距离限制的简单版: ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- DP 优化方法大杂烩 & 做题记录 I.
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...
随机推荐
- [转载]彻底卸载oracleXE数据库服务器
URL:http://www.2cto.com/database/201306/216182.html
- 下拉选择框 Spinner的用法。
代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...
- Redis (一) 概念安装
一.阿里云安装Redis 1.安装Redis yum -y install redis 2.启动Redis service redis start 或者(推荐使用) systemctl start ...
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water) (详解)
倒水(Water) Description 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水 ...
- ApplicationContext详解以及多个ApplicationContext.xml的相互引用
如果说BeanFactory是spring的心脏,那么Application就是完整的身躯.ApplicationContext就是由BeanFactory派生出来的. 一.ApplicationCo ...
- Vue.js 源码学习笔记 - 细节
1. this._eventsCount = { } 这是为了避免不必要的深度遍历: 在有广播事件到来时,如果当前 vm 的 _eventsCount 为 0, 则不必向其子 vm 继续传播该 ...
- Android 运行 Linux 可执行程序
/**************************************************************************** * Android 运行 Linux 可执行 ...
- 生成html报告并整合自动发动邮件功能
from HTMLTestRunner import HTMLTestRunnerfrom email.mime.text import MIMETextfrom email.header impor ...
- 10款PHP开源网店系统
在当今经济危机的大环境下,网上购物越来越来吃香,网上开店成本低,快捷方便,出名的电子商务网站有淘宝,拍拍,Ebay或是最新的百度有啊,这些网站都提供开店的机会,如果是想自己搭建购物平台,可以从下面选择 ...
- hdu1165 规律递推
题意:给了公式,求A(m,n). 并不知道为什么被杭电分类塞进了dp专题,但是我一开始显然看到这个题就觉得给那个公式用函数递归一下答案肯定能出来了,只不过既然放在了dp专题里面估计这样暴力求解会TLE ...