bzoj1767[Ceoi2009]harbingers 斜率优化dp
1767: [Ceoi2009]harbingers
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 421 Solved: 112
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 20
2 3 12
2 4 1
4 5 3
26 9
1 10
500 2
2 30
Sample Output
HINT

比较裸的斜率优化
由于是一棵树,所以向儿子节点走的时候不能完全更改栈的信息(因为回到父亲节点的时候必须撤销儿子节点的操作)
为了节省时间,可以直接二分查找出需要修改的位置,记录当前栈的信息,修改后进入儿子,回来的时候复原即可
修改只修改一个位置并把栈顶重新设置为那个位置,否则会花费很多时间
这篇博客不错http://www.cnblogs.com/zj75211/p/8148736.html
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
ll dis[N],f[N];
int n,tp,tot,s[N],hd[N],v[N],w[N];
struct edge{int v,w,next;}e[N<<];
double g(int i,int j){
return (double)(f[i]-f[j])/(double)(dis[i]-dis[j]);
}
void adde(int u,int v,int w){
e[++tot].v=v;
e[tot].w=w;
e[tot].next=hd[u];
hd[u]=tot;
}
int find(int l,int r,int x){
int mid=;
while(l<=r){
mid=(l+r)>>;
if(g(s[mid+],s[mid])<v[x])l=mid+;
else if(g(s[mid],s[mid-])>v[x])r=mid-;
else return mid;
}
return mid;
}
int insert(int l,int r,int u){
int mid=;
while(l<=r){
mid=(l+r)>>;
if(g(s[mid+],s[mid])<g(u,s[mid]))l=mid+;
else if(g(s[mid],s[mid-])>g(s[mid],u))r=mid-;
else return mid;
}
return mid;
}
void dfs(int u,int fa){
int pos=find(,tp,u);
f[u]=f[s[pos]]+w[u]+v[u]*(dis[u]-dis[s[pos]]);
pos=insert(,tp,u)+;
int siz=tp,tmp=s[pos];
s[pos]=u;tp=pos;
for(int i=hd[u];i;i=e[i].next){
int v=e[i].v;
if(v==fa)continue;
dis[v]=dis[u]+e[i].w;
dfs(v,u);
}
s[pos]=tmp;tp=siz;
} int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w);adde(v,u,w);
}
for(int i=;i<=n;i++)
scanf("%d%d",&w[i],&v[i]);
dfs(,);
for(int i=;i<=n;i++){
printf("%lld",f[i]);
if(i!=n)putchar(' ');
}
return ;
}
bzoj1767[Ceoi2009]harbingers 斜率优化dp的更多相关文章
- BZOJ 1767] [Ceoi2009] harbingers (斜率优化)
[BZOJ 1767] [Ceoi2009] harbingers (斜率优化) 题面 给定一颗树,树中每个结点有一个邮递员,每个邮递员要沿着唯一的路径走向capital(1号结点),每到一个城市他可 ...
- BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分
传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
- bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)
题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...
- [BZOJ3156]防御准备(斜率优化DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP
- 【BZOJ-1096】仓库建设 斜率优化DP
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3719 Solved: 1633[Submit][Stat ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- HDU2829 Lawrence(斜率优化dp)
学了模板题之后上网搜下斜率优化dp的题目,然后就看到这道题,知道是斜率dp之后有思路就可以自己做不出来,要是不事先知道的话那就说不定了. 题意:给你n个数,一开始n个数相邻的数之间是被东西连着的,对于 ...
随机推荐
- JAVA_SE基础——23.类的定义
黑马程序员入学blog ... java 面向对象的语言 对象:真实存在的唯一的实物. 比如:我家的狗, 类: 实际就是对某种类型事物的共性属性与行为的抽取. 抽象的概念... 比如说:车 ...
- C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现
我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...
- AngularJS1.X学习笔记12-Ajax
说到Ajax,你一定是思绪万千,想到XMLHttpRequest,$.ajax(),跨域,异步之类的.本文将探讨一下AngularJS的Ajax. 一.一个简单的例子 <!DOCTYPE htm ...
- tomca配置文件自动还原问题的解决 server.xml content.xml 等
当我们在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml和content.xml文件. 但是当我们修改完后重启Tomcat服务器时发现xml文件又被还原了,修改无效果. 为 ...
- shuffle和sort分析
MapReduce中的Shuffle和Sort分析 MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的 ...
- MySql查询正在进行中的事务
用法 SELECT * FROM information_schema.INNODB_TRX 这个只能查询此刻正在进行中的事务,已经完成的是查不到的 表字段定义 The INFORMATION_SCH ...
- Python系列-python内置函数
abs(x) 返回数字的绝对值,参数可以是整数.也可以是浮点数.如果是复数,则返回它的大小 all(iterable) 对参数中的所有元素进行迭代,如果所有的元素都是True,则返回True,函数等价 ...
- C# 枚举器
1:枚举器和可枚举类型 我们知道使用foreach可以遍历数组中的元素.那么为什么数组可以被foreach语句处理呢,下面我们就进行讨论一下这个问题. 2:使用foreach语句 我们知道当我们使用f ...
- RPC服务和HTTP服务
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- webstorm git团队开发技巧总结(一)
---恢复内容开始--- 1.git查看和修改用户名,邮箱 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变.每次commit都会用用户名和邮箱记录. (1)查看用户名和地址 git ...