洛谷3778 [APIO2017]商旅
题目:https://www.luogu.org/problemnew/show/P3778
一看就是0/1分数规划。但不能直接套模板,因为有个商品种类的限制。
考虑从a买在b卖,商品种类根本没用,关注的是最大营利。于是可以考虑暴枚建一个完全图消除商品种类的影响。
然后就可以愉快地0/1分数规划了。
注意:1.零环也是合法的!
2.!!!1点没有什么特殊的,spfa里不能只从1点走。应该把所有点都先加进队列里!图的连通性可能很差,但只要随便有个正环就行了,故应如此!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define ll long long
using namespace std;
const int N=,M=,K=;
const ll INF=;//memset 1
int n,m,k,ct[N];
ll t[N][N],c[N][N],s[][N][K],dis[N],l,r,ans;
bool vis[N];
int rdn()
{
int ret=,fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=-;ch=getchar();}
while(ch<=''&&ch>='')(ret*=)+=ch-'',ch=getchar();
return ret*fx;
}
ll rdl()
{
ll ret=,fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=-;ch=getchar();}
while(ch<=''&&ch>='')(ret*=)+=ch-'',ch=getchar();
return ret*fx;
}
void floyd()
{
for(int u=;u<=n;u++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
t[i][j]=min(t[i][j],t[i][u]+t[u][j]);
}
ll cal(int x,int y,ll lm)
{
return c[x][y]-t[x][y]*lm;
}
bool spfa(ll lm)
{
queue<int> q;
for(int i=;i<=n;i++)q.push(i),dis[i]=,vis[i]=ct[i]=;//////////////从1点不一定走到所有点(1点啥也不是)
while(q.size())
{
int u=q.front();q.pop();vis[u]=;
for(int v=;v<=n;v++)
if(dis[v]<=dis[u]+cal(u,v,lm))//<=,因为零环也可以
{
dis[v]=dis[u]+cal(u,v,lm);
if(!vis[v])
{
q.push(v);ct[v]++;vis[v]=;//vis[v]=1!!(别忘写……)
if(ct[v]>n)return true;
}
}
}
return false;
}
int main()
{
n=rdn();m=rdn();k=rdn();int x,y;ll z;
for(int i=;i<=n;i++)for(int u=;u<=k;u++)
for(int d=;d<=;d++)
{
s[d][i][u]=rdl();
if(s[d][i][u]==-){if(!d)s[d][i][u]=INF;else s[d][i][u]=-INF;}
}
memset(t,,sizeof t);//c初值为0
for(int i=;i<=m;i++)
{
x=rdn();y=rdn();z=rdl();t[x][y]=z;
}
floyd();
for(int i=;i<=n;i++)for(int j=;j<=n;j++)
// if(i!=j&&t[i][j]<INF)//写不写都行,写了更快一点//INF的t会在spfa里判掉//i与i数据应该不会给能营利的
for(int u=;u<=k;u++)c[i][j]=max(c[i][j],s[][j][u]-s[][i][u]),r=max(r,c[i][j]);
while(l<=r)
{
ll mid=((l+r)>>);
if(spfa(mid))ans=mid,l=mid+;
else r=mid-;
}
printf("%lld",ans);
return ;
}
洛谷3778 [APIO2017]商旅的更多相关文章
- 洛谷P3778 [APIO2017]商旅——01分数规划
题目:https://www.luogu.org/problemnew/show/P3778 转化有点技巧: 其实直接关注比率的上下两项,也就是盈利和时间: 通过暴枚和 floyd 可以处理出两两点间 ...
- BZOJ4898 & BZOJ5367 & 洛谷3778:[APIO2017]商旅——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4898 https://www.lydsy.com/JudgeOnline/problem.php? ...
- APIO 2017 商旅 洛谷3778
Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号 ...
- 洛谷 P2056 BZOJ 2743 [HEOI2012]采花
//表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- shell编程学习笔记之标准输入输出(read&echo)
2017-07-17 09:32:07 输入read: 用途: 从标准输入读取一行,或者从文件描述符FD(file descriptor)中读取一行,并且将其分割成字段. 用法: read [-ers ...
- [洛谷3041]视频游戏的连击Video Game Combos
题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...
- nodejs 设计模式
1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直接返回,若不存在,则创建实例对象,并将实例对象保存在静态变量中,当下次请求时,则可以直接返回这 ...
- Element UI 框架搭建
Element UI 框架搭建 1.webpack 全局安装 npm install -g webpack 2.淘宝镜像cnpm安装 npm install -g cnpm --registry=ht ...
- LeetCode第[49]题(Java):Group Anagrams
题目:同字符分组 难度:Medium 题目内容: Given an array of strings, group anagrams together. 翻译:给定一组字符串数组,按相同字符组成的字符 ...
- aps.net session全面介绍(生命周期,超时时间)
Asp.Net中的Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的 ...
- spring mvc:复选框(多选)
以user为例,user下有 username用户,password密码, address地址, receivePaper是否订阅, favotireFramework兴趣爱好, user.java ...
- XamlParseException异常
一般出现System.Windows.Markup.XamlParseException的错误是由1.dll库加载错误,查询一下你程序中引用的dll你是否加载并引用到程序内.2.程序中引用的文件(tx ...
- shell基础复习笔记
变量的设置 以等号连接,等号两边不能有空格 变量名首个字符必须是英文,可以使用下划线,不能使用标点符号,不能使用bash里的关键字 可以使用转义字符\将特殊符号(如Enter.$.空格.!等)变成一般 ...
- JS前端重点 -- Generator 函数的含义与用法
Generator 函数的含义与用法 1.generator http://www.ruanyifeng.com/blog/2015/04/generator.html http://it.taocm ...