ref

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
typedef long long ll;
int n, m, k, uu, vv, hea[105], cnt, tot[105];
ll b[105][1005], s[105][1005], w[105][105], bst[105][105], dis[105], ww;
bool ins[105];
const ll oo=0x3f3f3f3f3f3f3f3f;
queue<int> d;
struct Edge{
int too, nxt;
ll val;
}edge[20005];
void add_edge(int fro, int too, ll val){
edge[++cnt].nxt = hea[fro];
edge[cnt].too = too;
edge[cnt].val = val;
hea[fro] = cnt;
}
bool chk(ll lim){
memset(hea, 0, sizeof(hea));
memset(dis, 0, sizeof(dis));
while(!d.empty()) d.pop();
cnt = 0;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(bst[i][j]!=-1 && w[i][j]<oo)
add_edge(i, j, bst[i][j]-lim*w[i][j]);
for(int i=1; i<=n; i++){
d.push(i);
tot[i] = ins[i] = 1;
}
while(!d.empty()){
int x=d.front();
d.pop();
ins[x] = false;
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(dis[t]<=dis[x]+edge[i].val){//这里是大于等于,零环也合法
tot[t] = tot[x] + 1;
if(tot[t]>n) return true;
dis[t] = dis[x] + edge[i].val;
if(!ins[t]){
ins[t] = true;
d.push(t);
}
}
}
}
return false;
}
int main(){
memset(w, 0x3f, sizeof(w));
memset(bst, -1, sizeof(bst));
cin>>n>>m>>k;
for(int i=1; i<=n; i++)
for(int j=1; j<=k; j++)
scanf("%lld %lld", &b[i][j], &s[i][j]);
for(int i=1; i<=n; i++)
w[i][i] = 0;
for(int i=1; i<=m; i++){
scanf("%d %d %lld", &uu, &vv, &ww);
w[uu][vv] = min(w[uu][vv], ww);
}
for(int l=1; l<=n; l++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
w[i][j] = min(w[i][j], w[i][l]+w[l][j]); ll l=0, r=0, mid, re;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++){
if(i!=j && w[i][j]<oo){
bst[i][j] = 0;
for(int l=1; l<=k; l++)
if(s[j][l]!=-1 && b[i][l]!=-1)
bst[i][j] = max(bst[i][j], s[j][l]-b[i][l]);
r = max(r, bst[i][j]);
}
}
while(l<=r){
mid = (l + r) >> 1;
if(chk(mid)) re = mid, l = mid + 1;
else r = mid - 1;
}
cout<<re<<endl;
return 0;
}

loj2308 「APIO2017」商旅的更多相关文章

  1. 「APIO2017」商旅

    「APIO2017」商旅 题目描述 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所深深吸引,决定定居于此,做一个商人.科巴有 \(N\) 个集市, ...

  2. 【LOJ】 #2308. 「APIO2017」商旅

    题解 分数题可以想到分数规划,我们预处理出从i到j卖什么货物赚的最多,然后把每条边的边权改成"利润 - 效率 × 时间" 用spfa找正环即可 代码 #include <bi ...

  3. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  4. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  5. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  6. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  7. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  8. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  9. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

随机推荐

  1. JAVA和数据库工具的下载地址(备用)

    sqlite数据库驱动下载: http://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/

  2. ASP.NET中登陆验证码的生成和输入验证码的验证

    一:验证码的生成实现代码 protected void Page_Load(object sender, EventArgs e)    {        string validateCode = ...

  3. pat甲级1020中序后序求层序

    1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...

  4. [转载]AngularJS入门教程04:双向绑定

    在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...

  5. 利用Python实现 队列的算法

    以下内容都是来自“悟空“大神的讲解,听他的视频课,利用Python实现堆栈的算法,自己做了一些小总结,可能会存在自己理解的一些误区, 1.栈的实现 队列的特征是先进先出,同我们生活中的队列具有相同的特 ...

  6. react树状组件

    最近在react项目中需要一个树状组件,但是又不想因为这个去引入一套UI组件,故自己封装了一个基于react的树状组件, 个人认为比较难得部分在于数据的处理,话不多说直接上代码: 下面是tree.js ...

  7. CUDA入门需要知道的东西

    CUDA刚学习不久,做毕业要用,也没时间研究太多的东西,我的博客里有一些我自己看过的东西,不敢保证都特别有用,但是至少对刚入门的朋友或多或少希望对大家有一点帮助吧,若果你是大牛请指针不对的地方,如果你 ...

  8. C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  9. java基础编程—统计二进制数中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目代码 /** * 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. * Created by YuKai ...

  10. jquery循环获取name相同的元素

    今天做项目时,用到一种用jquery循环获取name相同的按钮,并且完成点击事件,记录一下 首先整段的html,是用js拼出来的(项目需求) getStudentArticle:function(op ...