题目: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]商旅的更多相关文章

  1. 洛谷P3778 [APIO2017]商旅——01分数规划

    题目:https://www.luogu.org/problemnew/show/P3778 转化有点技巧: 其实直接关注比率的上下两项,也就是盈利和时间: 通过暴枚和 floyd 可以处理出两两点间 ...

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

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

  3. APIO 2017 商旅 洛谷3778

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

  4. 洛谷 P2056 BZOJ 2743 [HEOI2012]采花

    //表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...

  5. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  6. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  7. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  8. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. Hive-开启动态分区

    开启动态分区 --开启动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict ...

  2. Python基础笔记系列三:list列表

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...

  3. 关于log4j.properties例子:DailyRollingFileAppender

    package com.v512.log4j; import org.apache.log4j.Logger; public class HelloLog4J { // 构造记录器,形参是记录器所在的 ...

  4. No toolchains found in the NDK toolchains folder for ABI with prefix

    通过Android Studio 的Sdk Manager安装NDK,安装完之后编译失败,报错信息如下: No toolchains found in the NDK toolchains folde ...

  5. Mysql 索引复习笔记

    之前学习索引后由于一直没怎么用,所以也只是粗略看了一下,最近发现索引的用处很大,并且也很多知识点,在此做复习记录. 什么是索引? 百度百科是这样描述的: 索引是为来加速对表中数据行中的检索而创建的一种 ...

  6. 报错HTTP Status 500 - Unable to instantiate Action

    报错如下: HTTP Status 500 - Unable to instantiate Action, visitAction, defined for 'visit_toAddPage' in ...

  7. Gogs/Gitea 在 docker 中部署

    注:Gitea是Gogs的一个分支版本,由多个维护者开发,支持搜索.lfs等,但是BUG较多,稳定性似乎没有Gogs好. #### 安装 ####// Gogs$ docker pull gogs/g ...

  8. shell基础复习笔记

    变量的设置 以等号连接,等号两边不能有空格 变量名首个字符必须是英文,可以使用下划线,不能使用标点符号,不能使用bash里的关键字 可以使用转义字符\将特殊符号(如Enter.$.空格.!等)变成一般 ...

  9. 初始化spring容器的几种方法

    package ssh.spring; import java.io.IOException; import org.springframework.beans.factory.BeanFactory ...

  10. monorepo和multrepo的简介

    项目管理的方式是多种形势的,依据管理的方式类进行项目建仓. mono或者mult其实都是项目管理的方式,只是两种方式是刚好相反的,拿来一起说是,更方便记忆而已. multrepo:将项目分化成为多个模 ...