Description

在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴。你被这个城市发达而美丽的市场所
深深吸引,决定定居于此,做一个商人。科巴有个集市,集市用从1到N的整数编号,集市之间通过M条单向道路连
接,通过每条道路都需要消耗一定的时间。在科巴的集市上,有K种不同的商品,商品用从1到K的整数编号。每个
集市对每种商品都有自己的定价,买入和卖出商品的价格可以是不同的。并非每个集市都可以买卖所有的商品:一
个集市可能只提供部分商品的双向交易服务;对于一种商品,一个集市也可能只收购而不卖出该商品或只卖出而不
收购该商品。如果一个集市收购一种商品,它收购这种商品的数量是不限的,同样,一个集市如果卖出一种商品,
则它卖出这种商品的数量也是不限的。为了更快地获得收益,你决定寻找一条盈利效率最高的环路。环路是指带着
空的背包从一个集市出发,沿着道路前进,经过若干个市场并最终回到出发点。在环路中,允许多次经过同一个集
市或同一条道路。在经过集市时,你可以购买或者卖出商品,一旦你购买了一个商品,你需要把它装在背包里带走
。由于你的背包非常小,任何时候你最多只能持有一个商品。在购买一个商品时,你不需要考虑你是否有足够的金
钱,但在卖出时,需要注意只能卖出你拥有的商品。从环路中得到的收益为在环路中卖出商品得到的金钱减去购买
商品花费的金钱,而一条环路上消耗的时间则是依次通过环路上所有道路所需要花费的时间的总和。环路的盈利效
率是指从环路中得到的收益除以花费的时间。需要注意的是,一条没有任何交易的环路的盈利效率为0。你需要求
出所有消耗时间为正数的环路中,盈利效率最高的环路的盈利效率。答案向下取整保留到整数。如果没有任何一条
环路可以盈利,则输出0。

Input

第一行包含3个正整数N,M和K,分别表示集市数量、道路数量和商品种类数量。
接下来的N行,第行中包含2K个整数描述一个集市Bi,1 Si,1 Bi,2 Si,2…Bik Si,k。
对于任意的1<=j<=k,整数和分别表示在编号为的集市上购买、卖出编号为的商品时的交易价格。
如果一个交易价格为-1,则表示这个商品在这个集市上不能进行这种交易。
接下来M行,第行包含3个整数Vp,Wp和Tp,表示存在一条从编号为Vp的市场出发前往编号为Wp的市场的路径花费Tp分钟。
1<=N<=100,1<=M<=9900。
如果在编号为的集市i中,编号为j的商品既可以购买又可以卖出
对于编号为P(1<=P<=M)的道路,保证Vp<>Wp且1<=Tp<=10^7
不存在满足1<=P < Q<=M的P,Q,使得(Vp,Wp)=(Vq,Wq) 。

输出包含一个整数,表示盈利效率最高的环路盈利效率,答案向下取整保留到整数。
如果没有任何一条环路可以盈利,则输出0。

Sample Input

4 5 2

10 9 5 2

6 4 20 15

9 7 10 9

-1 -1 16 11

1 2 3

2 3 3

1 4 1

4 3 1

3 1 1

Sample Output

2

在样例中,我们考虑下面两条环路,“1 - 2 - 3 - 1” 和 “1 - 4 - 3 - 1”。

考虑环路 “1 - 2 - 3 - 1” :这条环路消耗的总时间是 分钟。在这条环路中,

最佳的交易方式是:在编号为 1 的集市中购买编号为 2 的商品(花费的金钱为 5 );在编号

为 2 的集市中卖出编号为 2 的商品(得到的金钱为 15 ),然后立即购买编号为 1 的商品

(花费的金钱为 6 );带着编号为 1 的商品经过编号为 3 的集市,在回到编号为 1 的城市后

卖出(得到的金钱为 9 )。在这个环路中,总盈利为13。 这个环路的盈利效率为13/7 ,向下取整后为 1 。

考虑环路 “1 - 4 - 3 - 1” :这条环路消耗的总时间是 分钟。在这条环路中,

最佳的交易方式是:在编号为 1 的集市中购买编号为 2 的商品(花费的金钱为 5 );在编号

为 4 的集市中卖出编号为 2 的商品(得到的金钱为 11 );然后经过编号为 3 的集市回到编

号为 1 的城市。在这个环路中,总盈利为 6。 这个环路的盈利效率为6/3 ,向下取整后为 2 。

综上所述,盈利效率最高的环路的盈利效率为 2 。

01分数规划中的最优比例生成环问题,先floyed跑出最短路,在更新出最大收益,二分答案,spfa炮正环、

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define int long long using namespace std;
const int MAXN = ;
const int inf = 0x3f3f3f3f; int n,m,k,s[MAXN][MAXN],b[MAXN][MAXN];
int dp[MAXN][MAXN],map[MAXN][MAXN],ans;
int cnt[MAXN];
double dis[MAXN];
bool vis[MAXN]; inline bool check(double xx){
queue<int> q;
for(int i=;i<=n;i++) q.push(i),vis[i]=,dis[i]=,cnt[i]=;
while(!q.empty()){
int x=q.front();
q.pop();
vis[x]=;
for(int i=;i<=n;i++)
if(dp[x][i]!=inf && i!=x){
int now=map[x][i]-dp[x][i]*xx;
if(dis[i]<=dis[x]+now){
dis[i]=dis[x]+now;
if(!vis[i]){
vis[i]=;
q.push(i);
if(++cnt[i]>=n) return true;
}
}
}
}
return false;
} inline void floyed(){
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++)
for(register int o=;o<=n;o++)
dp[i][j]=min(dp[i][j],dp[i][o]+dp[o][j]);
for(register int i=;i<=n;i++) dp[i][i]=;
} inline void DP(){
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++){
if(dp[i][j]!=inf && (i!=j))
for(register int o=;o<=k;o++){
if(b[i][o]==- || s[j][o]==-) continue;
map[i][j]=max(s[j][o]-b[i][o],map[i][j]);
}
}
// for(register int i=1;i<=n;i++){
// for(register int j=1;j<=n;j++)
// cout<<map[i][j]<<" ";
// cout<<endl;
// }
} inline void update(){
double l=0.0,r=1e9;
while(r-l>1e-){
double mid=(l+r)/;
if(check(mid)) l=mid;
else r=mid;
}
printf("%lld",(int)r);
} signed main(){
memset(dp,0x3f,sizeof(dp));
scanf("%lld%lld%lld",&n,&m,&k);
for(register int i=;i<=n;i++)
for(register int j=;j<=k;j++)
scanf("%lld%lld",&b[i][j],&s[i][j]);
for(register int i=;i<=m;i++){
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
dp[x][y]=z;
}floyed();DP();update();
return ;
}
 

APIO 2017 商旅 洛谷3778的更多相关文章

  1. BZOJ4898 & BZOJ5367 & 洛谷3778:[APIO2017]商旅——题解

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

  2. 洛谷3778 [APIO2017]商旅

    题目:https://www.luogu.org/problemnew/show/P3778 一看就是0/1分数规划.但不能直接套模板,因为有个商品种类的限制. 考虑从a买在b卖,商品种类根本没用,关 ...

  3. [APIO 2017] 商旅

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5367 [算法] 很明显的分数规划问题 预处理从一个点走到另一个点所获最大利润和最短路 ...

  4. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  5. 2017普及组D1T3 洛谷P3956 棋盘

    2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...

  6. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  7. 洛谷 P3951 NOIP 2017 小凯的疑惑

    洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...

  8. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  9. 【洛谷P3749】[六省联考2017]寿司餐厅(网络流)

    洛谷 题意: 给出\(n\)份寿司,现可以选取任意多次连续区间内的寿司,对于区间\([l,r]\),那么贡献为\(\sum_{i=l}^r \sum_{j=i}^rd_{i,j}\)(对于相同的\(d ...

随机推荐

  1. docker部署coredns

    示例: [root@corends coredns]# cd /home/coredns/ [root@corends coredns]# ls -al total drwxr-xr-x root r ...

  2. JS时间差(毫秒/天数/月份)

    var startDate = "2016-06-06"; var endDate = "2016-08-08"; var start=new Date(sta ...

  3. 【多线程】volatile

    Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...

  4. Shiro学习(21)授予身份及切换身份

    在一些场景中,比如某个领导因为一些原因不能进行登录网站进行一些操作,他想把他网站上的工作委托给他的秘书,但是他不想把帐号/密码告诉他秘书,只是想把工作委托给他:此时和我们可以使用Shiro的RunAs ...

  5. jQuery选择器 (详解)

    1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, $(" ...

  6. php开发面试题---游戏面向对象设计与分析实例

    php开发面试题---游戏面向对象设计与分析实例 一.总结 一句话总结: 不要光空想,多看几个实例就知道自己的游戏该怎么设计了 根据实例去理解面向对象编程的的六大原则 1.英雄种类分别有:战士.法师. ...

  7. python中处理.mat文件

    python中处理.mat文件 背景 在实际使用python的时候,发现很多数据都是使用.mat的形式保存,所以,如何使用python读写.mat文件成为了许多python使用者必备的技能. -v7. ...

  8. axios请求中的参数(params)与路径变量

    1.axios的参数(params) import axios from 'axios' export function getDiscList() { const url = '/api/getDi ...

  9. mongodb 数据修改

    update:语法格式如下: db.collection.update( <query>, <update>, { upsert: <boolean>, multi ...

  10. webstorm vue eslint 自动修正配置

    原文:https://medium.com/@netczuk/even-faster-code-formatting-using-eslint-22b80d061461 https://stackov ...