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 100001typedef long long LL;int P;int front[N],to[N<<1],nxt[N<<1],val[N<<1],tot;int dis[N];int head,tail,q[N]; LL dp[N];void read(int &x) {x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; 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-2,mid,tmp=-1;while(l<=r){mid=l+r>>1;if(Y(q[mid],q[mid+1])>=2*dis[x]*X(q[mid],q[mid+1])) tmp=mid,r=mid-1;else l=mid+1;}if(tmp!=-1) head=tmp;else head=tail-1;int j=q[head];dp[x]=1LL*(dis[x]-dis[j])*(dis[x]-dis[j])+P+dp[j];l=head,r=tail-2,tmp=-1;while(l<=r){mid=l+r>>1;if(Y(q[mid],q[mid+1])*X(q[mid+1],x)<=Y(q[mid+1],x)*X(q[mid],q[mid+1])) tmp=mid,l=mid+1;else r=mid-1;}if(tmp!=-1) tail=tmp+2;else tail=head+1;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-1]=rr; tail=now_t; }void clear() {tot=0;memset(front,0,sizeof(front)); }int main() {int T;read(T);int n,u,v,w;while(T--){clear();read(n); read(P);for(int i=1;i<n;++i){read(u); read(v); read(w);add(u,v,w);}dp[1]=-P;for(int i=front[1];i;i=nxt[i]){head=0; tail=1;q[0]=1;dis[to[i]]=val[i];dfs(to[i],1);}LL ans=0;for(int i=2;i<=n;++i) ans=max(ans,dp[i]);cout<<ans<<'\n';} }
转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8468640.html
hdu 5956 The Elder相关推荐
- The Elder HDU - 5956
/* 树上斜率优化 一开始想的是构造出一个序列 转化成一般的dp但是可能被卡 扫把状的树的话可能变成n*n 其实可以直接在树上维护这个单调队列 dfs虽然搞得是一棵树,但是每次都是dfs到的都是一个序 ...
- 2016_shengyang_onsite
5948 Thickest Burger 签到,a+b+max(a,b) 5949 Relative atomic mass 签到,数组+统计一下 5950 Recursive sequence 矩阵 ...
- ACM里的期望和概率问题 从入门到精(入)通(土)
ACM里的期望和概率问题的个人训练和总结 起因:在2020年一场HDU多校赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=68 ...
- hdu 1301 Jungle Roads 最小生成树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
最新文章
- android 应用启动不了,不能断点
- 如何在Ruby中求和数字数组?
- 分享42个超棒的智能手机摄影画廊
- 在csdn上如何快速转载博客
- 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用
- 【只有光头才能变强,文末有xx】分享一波Lambda表达式
- okHttp记录---response.body().string()输出的结构是乱码
- udp组播的应用场景
- JDK各个版本的新特性jdk1.5-jdk8
- LInux 查看环境变量
- 不收费的数据恢复软件_有救了!快收好这7个数据恢复神器
- 掘金小册:Git 原理详解和实用指南
- vs2017 社区版本离线下载安装包
- MVCC(多版本并发控制)原理
- ffmpeg ts与mp4互相转换
- 郑州大学计算机课程表查询,郑州大学研究生课程表
- 独孤求败--之--InnoDB、MyISAM索引实现过程
- 台式机与笔记本辐射谁大
- linux 打印文件目录结构,linux基本文件目录的结构及管理
- 淘宝卖家中心打开淘宝客推广网页空白