洛谷P3994【比赛】Highway 【斜率优化】
来源:互联网 发布:淘宝退款流程手机 编辑:程序博客网 时间:2024/05/16 16:20
题目背景
C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接。除了首都1号城市,每个城市都有一家本地的客运公司,可以发车前往全国各地,有若干条高速公路连向其他城市,这是一个树型结构,1号城市(首都)为根。假设有一个人要从i号城市坐车出发前往j号城市,那么他要花费Pi*(i城市到j城市的距离)+Qi元。由于距离首都越远,国家的监管就越松,所以距离首都越远,客运公司的Pi(单位距离价格)越大,形式化的说,如果把高速路网看成一棵以首都为根的有根树,i号城市是j号城市的某个祖先,那么一定存在Pi<=Pj。
题目描述
大宁成为了国家统计局的调查人员,他需要对现在的高速路网进行一次调查,了解从其他每一个城市到达首都1号城市所花费的金钱。
因为有非常多转车(或不转车)的抵达首都的方法,所以人工计算这个结果是十分复杂的。大宁非常的懒,所以请你编写一个程序解决它。
输入输出格式
输入格式:第 1 行包含1个非负整数 n,表示城市的个数。
第 2 到 n 行,每行描述一个除首都之外的城市。其中第 i 行包含4 个非负整数 Fi,Si,Pi,Qi,分别表示 i号城市的父亲城市,它到父亲城市高速公路的长度,以及乘车价格的两个参数。
输出格式:输出包含 n-1 行,每行包含一个整数。
其中第 i 行表示从 i+1号城市 出发,到达首都最少的乘车费用。
输入输出样例
61 9 3 01 17 1 91 1 1 64 13 2 154 9 2 4
272674324
说明
对于前40%的数据1<=n<=1000。
对于另外20%的数据 满足从第i(i≠1)个城市出发的高速公路连向第i-1个城市。
对于所有的数据1<=n<=1000000,0<=Pi,Qi<=2^31-1,保证结果不会大于2^63-1。
大样例下载:https://pan.baidu.com/s/1jIpbrhG
题解
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#define LL long long int#define REP(i,n) for (int i = 1; i <= (n); i++)#define Redge(u) for (int k = head[u]; k != -1; k = edge[k].next)using namespace std;const int maxn = 1000005,maxm = 100005,INF = 1000000000;inline int RD(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57) {out = (out << 1) + (out << 3) + c - '0'; c = getchar();}return out * flag;}int n,ls[maxn],rb[maxn],Q[maxn],P[maxn];LL f[maxn],sum[maxn];int q[maxn],h,t;double slope(int u,int v){if (sum[u] == sum[v]) return INF;return (double)(f[u] - f[v]) / (sum[u] - sum[v]);}void dfs(int u){while (h < t && slope(q[h + 1],q[h]) < Q[u]) h++;int p = q[h];f[u] = f[p] + Q[u] * (sum[u] - sum[p]) + P[u];int temp = h,tem = t,te;while (h < t && slope(q[t],q[t - 1]) > slope(u,q[t])) t--;te = q[++t]; q[t] = u;for (int k = ls[u]; k; k = rb[k]){h = temp;dfs(k);}q[t] = te; t = tem;}int main(){n = RD(); int fa;for (int i = 2; i <= n; i++){fa = RD(); sum[i] = sum[fa] + RD();Q[i] = RD();P[i] = RD();rb[i] = ls[fa]; ls[fa] = i;}for (int k = ls[1]; k; k = rb[k]) q[h = t = 0] = 1,dfs(k);for (int i = 2; i <= n; i++) printf("%lld\n",f[i]);return 0;}
- 洛谷P3994【比赛】Highway 【斜率优化】
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 斜率优化
- 洛谷3195玩具装箱(斜率优化)
- Highway
- DP(斜率优化)
- 【斜率优化DP】Batch_Scheduling
- Hdu-2993斜率优化
- HDOJ-3480斜率优化
- HDOJ2829-斜率优化
- 人工智能这么火,可你真的会用 TensorFlow?
- 马云刘强东隔空互怼,美团外卖大范围故障,苹果系统漏洞百出 | 一周业界事
- Python Tkinter
- mybatis官网参考文档-MapperXML_自动映射(版本: 3.4.6-SNAPSHOT)
- 【Scikit-Learn 中文文档】寻求帮助
- 洛谷P3994【比赛】Highway 【斜率优化】
- 【Scikit-Learn 中文文档】处理文本数据
- mybatis官网参考文档-MapperXML_缓存(版本: 3.4.6-SNAPSHOT)
- mybatis官网参考文档-动态 SQL(版本: 3.4.6-SNAPSHOT)
- 安卓实战开发之JNI入门及高效的配置
- 为什么软件工程师找不到工作?我想分享四个“恐怖故事”
- 刘强东:中国几千万穷人是富人耻辱!网友狂点赞
- 想知道为什么没人追你吗?
- iOS原生与RN的通信(Swift版)