[ACM湖南省赛] CSU 1806 动态最短路的积分
来源:互联网 发布:nginx epoll 编辑:程序博客网 时间:2024/04/25 18:18
题意
给一个有向图,n<=10个点m条边,第i条边连接< ai,bi>,权值随时间t变化为ci*t+di。设t时刻最短路为f(t),求∫_0^T▒f(t)dt/T。
思路
边权是一次函数,最短路f(t)一定是一些线段组成的函数。理想情况是按照拐点划分,然后分段积分。这里如果区间中点等于左右端点的平均值那么就可以认为这里是一条直线,不必继续划分。而拐点数和点数同一规模,所以这样可以划分到很高的精度。因为被积函数是由一次函数连接的,所以不必用普通辛普森公式的二次拟合,直接用梯形算就好了。
AC代码 C
#include <stdio.h>#include <string.h>#include <math.h>#define MAXN 12#define INF 1e10int n;int G[MAXN][MAXN][2];double forigin(double x){ int i, j, k; static double dist[MAXN][MAXN]; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) dist[i][j] = G[i][j][0] < 0 ? INF : (double)G[i][j][0] * x + (double)G[i][j][1]; for (k = 1; k <= n; k++) for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if (dist[i][j] > dist[i][k] + dist[k][j]) dist[i][j] = dist[i][k] + dist[k][j]; return dist[1][n];}//由forigin(x)得到某点被积函数的值#define EPS 1e-8 //精度double simpson(double l, double fl, double r, double fr) //辛普森自适应积分{ double m = (l + r) * 0.5, fm = forigin(m); //二分中点及其值 return fabs(fl + fr - 2.0 * fm) < EPS ? fm * (r - l) : simpson(l, fl, m, fm) + simpson(m, fm, r, fr);}//return那句的判断可以根据被积函数的特点改写int main(){ int m, T, a, b, c, d; while (scanf("%d%d%d", &n, &m, &T) > 0) { memset(G, -1, sizeof G); while (m-- && scanf("%d%d%d%d", &a, &b, &c, &d) > 0) { G[a][b][0] = c; G[a][b][1] = d; } printf("%.8f\n", simpson(0, forigin(0), T, forigin(T)) / (double)T); } return 0;}
0 0
- [ACM湖南省赛] CSU 1806 动态最短路的积分
- CSU 1806 (simpson积分 最短路)
- CSU 1806: Toll Simpon积分,最短路
- 【最短路】【数学】CSU 1806 Toll (2016湖南省第十二届大学生计算机程序设计竞赛)
- 【最短路】【STL】CSU 1808 地铁 (2016湖南省第十二届大学生计算机程序设计竞赛)
- CSU 1806 Toll(数学+最短路)
- [CSU 1808(湖南省赛16)] 地铁 (拆点建图+多源多汇最短路)
- 2015湖南省赛 CSU 1779 错误的算法 (水)
- CSU 1115 湖南省第八届大学生计算机程序设计竞赛 (最短的名字[字典树])
- CSU 1115 最短的名字(湖南省第八届大学生计算机程序设计竞赛)
- 湖南省第八届大学生计算机程序设计竞赛CSU--最短的名字
- 2016ACM湖南省赛
- CSU 1256 天朝的单行道 最短路问题
- csu 1803 16年湖南省赛
- csu 1803 2016 2016湖南省赛 A
- csu 1809 Parenthesis 2016湖南省赛 G
- ACM最短路问题
- ACM Dijkstra 最短路
- stm32f4 - 启动过程
- PackageKit概述
- Spawning a TTY Shell
- 一个据说第一次接触都会做错的Java面试题和类加载器的介绍
- 一个有意思的题目:单循环实现乘法表
- [ACM湖南省赛] CSU 1806 动态最短路的积分
- UVa 10976 Fraction Again?! 分数拆解 (例题7-3)
- 51单片机 指纹模块 波特率问题解决和命令分析2
- stl remove 和 erase
- cf437C The Child and Toy 贪心
- emplace_back() 和 push_back 的区别
- nginx 403 forbidden错误的解决
- 面试题001
- 415.Valid Palindrome-有效回文串(容易题)