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相关推荐

  1. The Elder HDU - 5956

    /* 树上斜率优化 一开始想的是构造出一个序列 转化成一般的dp但是可能被卡 扫把状的树的话可能变成n*n 其实可以直接在树上维护这个单调队列 dfs虽然搞得是一棵树,但是每次都是dfs到的都是一个序 ...

  2. 2016_shengyang_onsite

    5948 Thickest Burger 签到,a+b+max(a,b) 5949 Relative atomic mass 签到,数组+统计一下 5950 Recursive sequence 矩阵 ...

  3. ACM里的期望和概率问题 从入门到精(入)通(土)

    ACM里的期望和概率问题的个人训练和总结 起因:在2020年一场HDU多校赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=68 ...

  4. hdu 1301 Jungle Roads 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...

  5. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  6. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  7. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  8. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  9. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  10. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

最新文章

  1. android 应用启动不了,不能断点
  2. 如何在Ruby中求和数字数组?
  3. 分享42个超棒的智能手机摄影画廊
  4. 在csdn上如何快速转载博客
  5. 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用
  6. 【只有光头才能变强,文末有xx】分享一波Lambda表达式
  7. okHttp记录---response.body().string()输出的结构是乱码
  8. udp组播的应用场景
  9. JDK各个版本的新特性jdk1.5-jdk8
  10. LInux 查看环境变量
  11. 不收费的数据恢复软件_有救了!快收好这7个数据恢复神器
  12. 掘金小册:Git 原理详解和实用指南
  13. vs2017 社区版本离线下载安装包
  14. MVCC(多版本并发控制)原理
  15. ffmpeg ts与mp4互相转换
  16. 郑州大学计算机课程表查询,郑州大学研究生课程表
  17. 独孤求败--之--InnoDB、MyISAM索引实现过程
  18. 台式机与笔记本辐射谁大
  19. linux 打印文件目录结构,linux基本文件目录的结构及管理
  20. 淘宝卖家中心打开淘宝客推广网页空白

热门文章

  1. [原创]K8_C段旁注查询工具5.0 30款国外主流CMS识别+智能识别未知CMS
  2. vast显示不出来服务器,VAST实用小知识?
  3. 黄金短线交易技巧是什么?
  4. 路由器怎么连接台式电脑
  5. TODA项目Part1—后端项目设置与连接数据库
  6. 计算机考研404是什么意思,研路分享:我的404分考研高分心得体会
  7. 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学专业
  8. Java内存Happen-Before
  9. 表格识别综述与相关实战
  10. 开源高手推荐 十大最流行开源软件