如果要在某点买入某物品并在另一点卖出,肯定是走其间最短路径。于是预处理任意两点间的收益和最短路径,连完边二分答案判负环即可,可以全程floyd。注意inf大小。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 110
  10. #define M 10010
  11. #define K 1010
  12. #define inf 1000000001
  13. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
  14. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  15. int read()
  16. {
  17. int x=,f=;char c=getchar();
  18. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  19. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  20. return x*f;
  21. }
  22. int n,m,k,a[N][K],b[N][K],d[N][N],v[N][N],t;
  23. ll c[N][N];
  24. int main()
  25. {
  26. #ifndef ONLINE_JUDGE
  27. freopen("bzoj5367.in","r",stdin);
  28. freopen("bzoj5367.out","w",stdout);
  29. const char LL[]="%I64d\n";
  30. #else
  31. const char LL[]="%lld\n";
  32. #endif
  33. n=read(),m=read(),k=read();
  34. for (int i=;i<=n;i++)
  35. {
  36. for (int j=;j<=k;j++)
  37. a[i][j]=read(),b[i][j]=read();
  38. }
  39. for (int i=;i<=n;i++)
  40. for (int j=;j<=n;j++)
  41. d[i][j]=inf;
  42. for (int i=;i<=m;i++)
  43. {
  44. int x=read(),y=read(),z=read();
  45. d[x][y]=min(d[x][y],z);
  46. }
  47. for (int k=;k<=n;k++)
  48. for (int i=;i<=n;i++)
  49. for (int j=;j<=n;j++)
  50. d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
  51. for (int i=;i<=n;i++)
  52. for (int j=;j<=n;j++)
  53. for (int x=;x<=k;x++)
  54. if (~b[j][x]&&~a[i][x]) v[i][j]=max(v[i][j],b[j][x]-a[i][x]);
  55. int l=,r=inf,ans=;
  56. while (l<=r)
  57. {
  58. int mid=l+r>>;
  59. for (int i=;i<=n;i++)
  60. for (int j=;j<=n;j++)
  61. c[i][j]=1ll*d[i][j]*mid-v[i][j];
  62. for (int k=;k<=n;k++)
  63. for (int i=;i<=n;i++)
  64. for (int j=;j<=n;j++)
  65. c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
  66. bool flag=;for (int i=;i<=n;i++) if (c[i][i]<=) {flag=;break;}
  67. if (flag) l=mid+,ans=mid;
  68. else r=mid-;
  69. }
  70. cout<<ans;
  71. return ;
  72. }

BZOJ4898/5367 Apio2017商旅(分数规划+floyd)的更多相关文章

  1. 【BZOJ4898】[Apio2017]商旅 分数规划+SPFA

    [BZOJ4898][Apio2017]商旅 Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个 ...

  2. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

  3. BZOJ 4898 Luogu P3778 [APIO2017]商旅 (分数规划、最短路)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4898 (luogu)https://www.luogu.org/probl ...

  4. 【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa

    题目描述 有n个点.m条边.和k种商品.第$i$个点可以以$B_{ij}$的价格买入商品$j$,并以$S_{ij}$的价格卖出.任何时候只能持有一个商品.求一个环,使得初始不携带商品时以某种交易方式走 ...

  5. bzoj4898 & loj2308 [Apio2017]商旅 最短路+01分数规划

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4898 https://loj.ac/problem/2308 题解 发现我们可以把整个环路分成 ...

  6. luogu3778/bzoj4898 商旅 (floyd+分数规划+spfa)

    首先floyd求出来每两点间的最短距离,然后再求出来从某点买再到某点卖的最大收益 问题就变成了找到一个和的比值最大的环 所以做分数规划,二分出来那个答案r,把边权变成w[i]-r*l[i],再做spf ...

  7. bzoj 4898: [Apio2017]商旅【Floyd+分数规划+二分】

    其实并不会分数规划 因为要最大化 ans=总收益/总路程 ,所以考虑二分答案,找到一条 ans<=总收益/总路程 的回路.先预处理出d(i,j)为(i,j)最短路,w(i,j)为在i买某个物品在 ...

  8. 【算法】01分数规划 --- HNOI2009最小圈 & APIO2017商旅 & SDOI2017新生舞会

    01分数规划:通常的问法是:在一张有 \(n\) 个点,\(m\) 条边的有向图中,每一条边均有其价值 \(v\) 与其代价 \(w\):求在图中的一个环使得这个环上所有的路径的权值和与代价和的比率最 ...

  9. BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划

    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...

随机推荐

  1. zabbix最新版3.4搭建(根据官方文档适当修改)

    操作系统:CentOS Linux release 7.4.1708 (Core) 1.安装apache 1.1 安装apache yum install httpd httpd-devel 1.2 ...

  2. RHCE模拟考试

    真实考试环境说明: 你考试所用的真实物理机器会使用普通账号自动登陆,登陆后,桌面会有两个虚拟主机图标,分别是system1和system2.所有的考试操作都是在system1和system2上完成.S ...

  3. Zabbix学习之路(四)之Web监控

    1.Zabbix监控web服务器访问性能 zabbix 对 web 性能的监控,通过它可以了解 web 站点的可用性以及性能.最终将各项指标绘制到图形中,这样我们可以了解到一个站点的下载速度.响应速度 ...

  4. Entity Framework for Oracle 基本配置

    1.需要安装ODAC 如果不安装ODAC,在数据源连接的配置中,看不到Oracle的选项 我下载安装的组件是32-bit Oracle Data Access Components (ODAC)  w ...

  5. Android开源的精美日历控件,热插拔设计的万能自定义UI

    Android开源的精美日历控件,热插拔设计的万能自定义UI UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的 ...

  6. Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息

    目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...

  7. PHP:Iterator(迭代器)接口和生成器

    迭代器 可在内部迭代自己的外部迭代器或类的接口.详情:http://php.net/manual/zh/class.iterator.php 接口摘要 Iterator extends Travers ...

  8. 3星|麦肯锡合伙人《从1到N》:PPT讲稿,图表不错,讲解不够深入

    从1到N:企业数字化生存指南 两位作者是麦肯锡合伙人.全书插图比较多,图做的还比较有水平.但是相关文字不够深入,我读后的感觉是:图表不是两位执笔者做的,他们对细节不清楚,对图表涉及到的行业也缺乏深入的 ...

  9. LeetCode--147.对链表进行插入排序

    题目描述: 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插入排序算法 ...

  10. Codeforces 552 E. Two Teams

    E. Two Teams time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...