[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=5367

[算法]

很明显的分数规划问题

预处理从一个点走到另一个点所获最大利润和最短路

SPFA判正环是否存在即可

时间复杂度 : O(N ^ 2K + N ^ 2 logN)

[代码]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define N 1010
#define M 10010
const double inf = 1e15;
const double EPS = 1e-; int n , m , k;
int cnt[N];
ll dist[N][N] , cst[N][N] , B[N][N] , S[N][N];
double D[N][N] , dis[N];
bool inq[N]; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline bool check(double mid)
{
queue< int > q;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
D[i][j] = 1.0 * cst[i][j] - 1.0 * dist[i][j] * mid;
}
}
memset(inq , false , sizeof(inq));
for (int i = ; i <= n; i++)
{
q.push(i);
inq[i] = true;
cnt[i] = ;
dis[i] = -inf;
}
while (!q.empty())
{
int cur = q.front();
q.pop();
inq[cur] = false;
for (int i = ; i <= n; i++)
{
if (dis[cur] + D[cur][i] >= dis[i])
{
dis[i] = dis[cur] + D[cur][i];
if (!inq[i])
{
inq[i] = true;
++cnt[i];
if (cnt[i] > n) return true;
q.push(i);
}
}
}
}
return false;
} int main()
{ read(n); read(m); read(k);
for (int i = ; i <= n; i++)
{
for (int j = ; j <= * k; j++)
{
ll x;
read(x);
if (j & ) B[i][(j + ) >> ] = x;
else S[i][j >> ] = x;
}
}
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
for (int x = ; x <= k; x++)
{
if (B[i][x] != - && S[j][x] != -)
chkmax(cst[i][j] , S[j][x] - B[i][x]);
}
}
}
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
dist[i][j] = inf;
}
}
for (int i = ; i <= m; i++)
{
int u , v;
ll w;
read(u); read(v); read(w);
chkmin(dist[u][v] , w);
}
for (int x = ; x <= n; x++)
{
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
chkmin(dist[i][j] , dist[i][x] + dist[x][j]);
}
}
}
double l = , r = , ans = ;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
chkmax(r , (double)cst[i][j]);
}
}
while (r - l > EPS)
{
double mid = (l + r) / 2.0;
if (check(mid))
{
l = mid;
ans = mid;
} else r = mid;
}
printf("%lld\n" , (ll)ans); return ; }

[APIO 2017] 商旅的更多相关文章

  1. APIO 2017 商旅 洛谷3778

    Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号 ...

  2. APIO 2017 游记

    //第一次写游记,只是流水账...结果好像确实只去游了…… day-11 省选挂了,即将退役……(然而apio之后得知并没有退役,感谢放我一条活路)(吐槽出题人考完才造数据,题目没有子任务之类的玩意, ...

  3. CTSC&APIO 2017游记

    Day 0 早上4点多起床赶飞机,起床的时候发现闹钟调成下午4点的了...(虽然说早就已经被父母的洗漱声音吵醒了) 飞机上碎觉.到了北京发现比福州还热...而且北京今天意外地好天气,没有传言中的&qu ...

  4. AtCoder Grand Contest 015 题解

    A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...

  5. HAOI 2017 游记

    省选 2017年4月23日 流水账式游记,不喜勿喷. Day0: 准备出发,上午敲了一顿板子,板子敲完了就打小游戏,老师也不管了. 过程中各种奶,说什么今年一定考仙人掌啦,今年一定考字符串啦,今年一定 ...

  6. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  7. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  8. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  9. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

随机推荐

  1. 托管和非托管转换新方法:Marshaling Library(zz) 【转】

    托管和非托管转换新方法:Marshaling Library(zz) 托管和非托管转换新方法:Marshaling Library(zz) http://hi.baidu.com/superql/bl ...

  2. ffmpeg一些filter使用方法、以及一些功能命令

    1.加字幕 命令:ffmpeg -i <input> -filter_complex subtitles=filename=<SubtitleName>-y <outpu ...

  3. 自己定义ImageView,实现点击之后算出点击的是身体的哪个部位

    近期也是由于项目的原因,所以有机会接触到这边的算法. 此文重点不是怎样实现的思路和原理, 有须要的同事能够借鉴一下 废话不多说,直接上代码: <span style="font-siz ...

  4. 简化动态MERGE的SQL计算

    MSSQL.ORACLE等数据库支持MERGE语句更新表.但表结构未知时,因为缺乏集合类数据.用存储过程获得表结构再动态拼出SQL很麻烦,代码会有几十行之多:相同原因,用Java等高级语言实现也不简单 ...

  5. Eoeclient源代码分析---SlidingMenu的使用

    Eoeclient源代码分析及代码凝视 使用滑动菜单SlidingMenu,单击滑动菜单的不同选项,能够通过ViewPager和PagerIndicator显示相应的数据内容. 0  BaseSlid ...

  6. springMVC学习之验证

    验证框中@NotEmpty.@NotBlank.@NotNull乍一看还是容易弄混的.主要使用情况记录一下: @NotEmpty 用在集合类上面 @NotBlank 用在String上面 @NotNu ...

  7. 【java读书笔记】——java的异常处理

    程序在实际环境的执行过程中.安全成为须要首先考虑的重要因素之中的一个.这也是用户和程序猿最关心的问题.同一时候,Java语言健壮性也体如今了可以及时有效地处理程序中的错误.准确的说是Java的异常处理 ...

  8. Num 34 : HDOJ : 1205 吃糖果 [ 狄利克雷抽屉原理 ]

           抽屉原理:          桌上有十个苹果,要把这十个苹果放到九个抽屉里,不管如何放,我们会发现至少会有一个抽屉里面至少放两个苹果.          这一现象就是我们所说的" ...

  9. Django中的模板和分页

    模板 在Templates中添加母版: - 母版...html 母版(master.html)中可变化的地方加入: {%block content%}{%endblock%} 在子版 (usermg. ...

  10. ORACLE 36进制和10进制,互相转换函数

    第一部分 --36转10进制 create or replace function f_36to10 (str varchar) return int  is returnValue int;   s ...