hdu 5956 The Elder
http://acm.hdu.edu.cn/showproblem.php?pid=5956
转移方程:dp[i]=(dis[i]-dis[j])*(dis[i]-dis[j])+P+dp[j]
斜率优化,可持久化单调队列维护
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 typedef long long LL; int P; int front[N],to[N<<],nxt[N<<],val[N<<],tot; int dis[N]; int head,tail,q[N];
LL dp[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; val[tot]=w;
to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; val[tot]=w;
} inline double X(int i,int j) { return dis[j]-dis[i]; }
inline double Y(int i,int j) { return 1LL*dis[j]*dis[j]+dp[j]-1LL*dis[i]*dis[i]-dp[i]; } void dfs(int x,int y)
{
int now_h=head,now_t=tail;
int l=head,r=tail-,mid,tmp=-;
while(l<=r)
{
mid=l+r>>;
if(Y(q[mid],q[mid+])>=*dis[x]*X(q[mid],q[mid+])) tmp=mid,r=mid-;
else l=mid+;
}
if(tmp!=-) head=tmp;
else head=tail-;
int j=q[head];
dp[x]=1LL*(dis[x]-dis[j])*(dis[x]-dis[j])+P+dp[j];
l=head,r=tail-,tmp=-;
while(l<=r)
{
mid=l+r>>;
if(Y(q[mid],q[mid+])*X(q[mid+],x)<=Y(q[mid+],x)*X(q[mid],q[mid+])) tmp=mid,l=mid+;
else r=mid-;
}
if(tmp!=-) tail=tmp+;
else tail=head+;
int rr=q[tail];
q[tail++]=x;
for(int i=front[x];i;i=nxt[i])
if(to[i]!=y)
{
dis[to[i]]=dis[x]+val[i];
dfs(to[i],x);
}
head=now_h; q[tail-]=rr; tail=now_t;
} void clear()
{
tot=;
memset(front,,sizeof(front));
} int main()
{
int T;
read(T);
int n,u,v,w;
while(T--)
{
clear();
read(n); read(P);
for(int i=;i<n;++i)
{
read(u); read(v); read(w);
add(u,v,w);
}
dp[]=-P;
for(int i=front[];i;i=nxt[i])
{
head=; tail=;
q[]=;
dis[to[i]]=val[i];
dfs(to[i],);
}
LL ans=;
for(int i=;i<=n;++i) ans=max(ans,dp[i]);
cout<<ans<<'\n';
}
}
hdu 5956 The Elder的更多相关文章
- HDU 5956 The Elder (树上斜率DP)
题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 ...
- ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder && HDU 5956(斜率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5956 题意:一颗树上每条边有个权值,每个节点都有新闻要送到根节点就是1节点,运送过程中如果不换青蛙就是 ...
- The Elder HDU - 5956
/* 树上斜率优化 一开始想的是构造出一个序列 转化成一般的dp但是可能被卡 扫把状的树的话可能变成n*n 其实可以直接在树上维护这个单调队列 dfs虽然搞得是一棵树,但是每次都是dfs到的都是一个序 ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- ACM里的期望和概率问题 从入门到精通
起因:在2020年一场HDU多校赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有X,Y ...
- HDU - 59562016ACM/ICPC亚洲区沈阳站I - The Elder 树上斜率优化dp
题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 ...
- hdu 1301 Jungle Roads 最小生成树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- anaconda安装opencv3
opencv是C和C++语言编写的,很多教程都是基于C++语言进行学习的,可是机器学习最多的库是python写的,所以还是学学python怎么安装opencv3, 面向学习的大都是使用了anacond ...
- 阿里云ECS服务器源配置
前段时间领取了阿里云ECS免费试用6个月的福利,此处记录一下服务器源配置过程和服务器用户创建过程. 一.CentOS源配置 1.备份 mv /etc/yum.repos.d/CentOS-Base.r ...
- Unity光照与渲染设置学习笔记
学习了一下unity中有关光照和渲染的一些设置,现在才明白之前遇到的一些问题只是没有正确设置而已. unity不同版本的光照设置会有一些差异,而且可以调节的参数非常多,这里只记录一些重要的参数和使用方 ...
- GTX1060 深度学习工具链
通过试错,推荐GTX1060 WIN10的工具链记录如下: GPU: GTX 1060 6G OS: WIN10 CUDA:9.0 CuDNN:7.1.3 Tensorflow: Tensorflow ...
- [T-ARA][내가 너무 아파][我很痛]
歌词来源:http://music.163.com/#/song?id=5402882 作曲 : 新沙洞老虎/崔圭成 [作曲 : 新沙洞老虎/崔圭成] 作词 : 新沙洞老虎/崔圭成 [作词 : 新沙洞 ...
- Flask入门的第一个项目
前言: Flask简介:Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎. 想要学习flask,又非常迷茫,不知如何下手 ...
- 团队week9
1. Bug bash ▪ How many bugs is found in your bug bash? Bug很多,就前端的用户管理部分发现的bug就有14个. 2. Write a blog ...
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
- YQCB冲刺第二周第三天
今天的任务依旧查看消费明细的功能. 遇到的问题为显示消费记录时显示所有用户的消费记录. 站立会议 任务面板
- beta 圆桌 3
2018-12-16图片缺失,当日数据: 总工作量:24 已完成:5 剩余:19 031602111 傅海涛 1.今天进展 实时字幕的实现大概 2.存在问题 实时字幕存在不稳定和耗费资源 3.明天安排 ...