【Noip模拟 20161005】运货
问题描述
小ww开了一家快递公司,在nn个城市之间进行货物运输工作,一共雇了mm个快递员。 每个快递员性格很奇特,第ii号快递员只愿意将货物从城市sisi运送到titi(甚至不愿意将货物 从titi运送到sisi),并且如果他运送的货物量x≤dix≤di,那么他要求获得的报酬为x×aix×ai,否则为 di×ai+(x−di)×bidi×ai+(x−di)×bi。
现在小ww 接到一个大订单,需要将ff单位货物从ss 运送到tt,请求出小ww 的最小开支。 你可以假定每个快递员的运货量没有限制。
输入格式
第一行五个整数nn,mm,ss,tt,ff。
接下来mm行每行五个数sisi,titi,aiai,bibi,didi,描述一个快递员的信息。
输出格式
如有解请输出最小小开支,否则请输出Impossible。
输入样例
4 4 0 3 5
0 1 3 0 3
1 3 3 0 3
0 2 2 1 6
2 3 2 1 6
输出样例
18
数据范围
n≤100,m≤1000n≤100,m≤1000
si,ti,s,t≤n−1si,ti,s,t≤n−1
f,di≤200f,di≤200
ai,bi≤1000ai,bi≤1000.
保证至多只有一名邮递员ai<biai<bi,其余均是ai>biai>bi。
共5050组数据,保证数据有梯度。
交了7发,终于AC了,满满的都是泪。
#include<bits/stdc++.h>
using namespace std;
#define RE register long long
#define IL inline
#define N 101
#define M 1001
#define int long long
#define inf 21474983647
IL char gc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}template<class T>IL int read(T&x){
x=;register char c=gc();
while(c<)c=gc();
while(c>)x=(x<<)+(x<<)+(c^),c=gc();
}void write(RE x){
if (x>)write(x/);
putchar(x%^);
}int m,n,s,t,f,head[N],dis[N],cnt;
bitset<N>vis;
queue<int>q;
struct aa{int next,v,a,b,d;}e[M];
IL void addedge(RE u,RE v,RE a,RE b,RE d){e[++cnt]=(aa){head[u],v,a,b,d},head[u]=cnt;}
IL int work(RE i,RE x){return x<=e[i].d?x*e[i].a:e[i].d*e[i].a+(x-e[i].d)*e[i].b;}
IL int SPFA(RE u){memset(dis,0x3f,sizeof dis);
q.push(u),dis[u]=;
while (q.size()){
RE u=q.front();
q.pop(),vis[u]=;
for (RE v,i=head[u];i;i=e[i].next)
if (dis[v=e[i].v]>dis[u]+work(i,f)){
dis[v=e[i].v]=dis[u]+work(i,f);
if (!vis[v]) q.push(v),vis[v]=;
}
}return dis[t];
}signed main(){
read(n),read(m),read(s),read(t),read(f),++s,++t;
for (RE i=,s1,t,a,b,d;i^m;++i) read(s1),read(t),read(a),read(b),read(d),++s1,++t,addedge(s1,t,a,b,d);
RE ans=SPFA(s);
if (ans==inf)puts("Impoosble");
else write(ans);
}
100分代码
#include<bits/stdc++.h>
using namespace std;
#define RE register long long
#define IL inline
#define N 101
#define M 10001
#define int long long
#define inf 4557430888798830399
IL char gc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}template<class T>IL int read(T&x){
x=;RE f=;
register char c=gc();
while(c<)f|=c=='-',c=gc();
while(c>)x=(x<<)+(x<<)+(c^),c=gc();
if (f) x=-x;
}void write(RE x){if (x>) write(x/);
putchar(x%^);
}int ans,fi,m,n,s,t,f,cnt1,cnt2,head1[N],head2[N],dis1[N],dis2[N],d1[N][N],d2[N][N];
struct aa{int next,v,a,b,d;}e1[M],e2[M];
bitset<N>vis;
queue<int>q;IL void addedge1(RE u,RE v,RE a,RE b,RE d){
e1[++cnt1]=(aa){head1[u],v,a,b,d},head1[u]=cnt1;
}IL void addedge2(RE s,RE t,RE a,RE b,RE d){e2[++cnt2]=(aa){head2[s],t,a,b,d},head2[s]=cnt2;}
IL int work(int i,int x){return x<=e1[i].d?x*e1[i].a:e1[i].d*e1[i].a+(x-e1[i].d)*e1[i].b;}
IL int spfa1(RE u){q.push(u),dis1[u]=;
while(q.size()){
RE u=q.front();q.pop(),vis[u]=;
for (RE i=head1[u],v;i;i=e1[i].next)
if (dis1[v=e1[i].v]>dis1[u]+work(i,f)){
dis1[v]=dis1[u]+work(i,f);
if (!vis[v]) q.push(v),vis[v]=;
}
}return dis1[t];
}IL int spfa2(RE u){q.push(u),dis2[u]=;
while(q.size()){
RE u=q.front();q.pop(),vis[u]=;
for (RE v,i=head2[u];i;i=e2[i].next)
if (dis2[v=e2[i].v]>dis2[u]+work(i,f)){
dis2[v]=dis2[u]+work(i,f);
if (!vis[v]) q.push(v),vis[v]=;
}
}return dis2[s];
}void floyd(){
for (RE i=;i<=n;++i)
for (RE v,j=head1[i];j;j=e1[j].next)
d1[i][v=e1[j].v]=min(d1[i][v],work(j,e1[fi].d));
for (RE k=;k<=n;++k) for (RE i=;i<=n;++i)
for (RE j=;j<=n;++j) d1[i][j]=min(d1[i][j],d1[i][k]+d1[k][j]);
for (RE i=;i<=n;++i)
for (RE v,j=head1[i];j;j=e1[j].next)
if (j^fi) d2[i][v=e1[j].v]=min(d2[i][v],work(j,f-e1[fi].d));
for (RE k=;k<=n;++k) for (RE i=;i<=n;++i)
for (RE j=;j<=n;++j) d2[i][j]=min(d2[i][j],d2[i][k]+d2[k][j]);
}signed main(){
//freopen("transport.in","r",stdin),freopen("transport.out","w",stdout);
read(n),read(m),read(s),read(t),read(f),++s,++t;
for (RE s1,t1,a,b,d,i=;i<=m;++i){
read(s1),read(t1),read(a),read(b),read(d);
++s1,++t1;if (a<b) fi=i;
addedge1(s1,t1,a,b,d),addedge2(t1,s1,a,b,d);
}memset(dis1,0x3f,sizeof dis1),memset(dis2,0x3f,sizeof dis2);
memset(d1,0x3f,sizeof d1),memset(d2,0x3f,sizeof d2);
ans=spfa1(s);
if (fi&&e1[fi].d<f){
spfa2(t),floyd();
for (RE i=;i<=n;++i)
for (RE j=;j<=n;++j)
if (i^j&&dis1[i]^inf&&d1[i][j]^inf&&d2[i][j]^inf&&dis2[j]^inf)
ans=min(ans,dis1[i]+d1[i][j]+d2[i][j]+dis2[j]);
}if (ans==inf) puts("Impossible");
else cout<<ans;
}
代码说明
SPFA比较裸,跳过,注意下标要加一,神坑。我们在判断负环的时候,需要用两种情况来判断,我们先用暴力储存d1。然后用反向边再次跑一遍floyd存在d2,然后我们加起来就可以了。做负环题,就是要把环拆开变成两条边,就可以了。
最后我扯一点别的东西,请听下回分解。
【Noip模拟 20161005】运货的更多相关文章
- 【Noip模拟 20161005】友好城市
问题描述 小ww生活在美丽的ZZ国.ZZ国是一个有nn个城市的大国,城市之间有mm条单向公路(连 接城市ii.jj的公路只能从ii连到jj).城市ii.jj是友好城市当且仅当从城市ii能到达城市jj并 ...
- 【Noip模拟 20161005】公约数
问题描述 小ww最近仔细研究了公约数,他想到了以下问题:现有nn个正整数,从中选k(2≤k≤n)k(2≤k≤n) 个,设这kk个数的最大公约数为gg,则这kk个数的价值为k×gk×g.求这个价值的最大 ...
- noip模拟赛 运
[问题背景]zhx 和妹子们玩数数游戏.[问题描述]仅包含 4 或 7 的数被称为幸运数.一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其中的元 ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
随机推荐
- 基于Verilog的按键检测实验
一.模块框图及基本思路 detect_module:检测按键输入脚的电平边沿变化 delay_10ms_module:延时消抖,输出按键有效信号 debounce_module:前两个模块的组合模块 ...
- python学习2:turtle的使用蟒蛇绘制的学习以及自己摸索的等边三角形绘制(跟随mooc学习)
首先先放上蟒蛇的绘制程序 import turtle#引入外部库#def保留字用于 定义函数 def drawSnake(rad,angle,len,neckrad): for i in range( ...
- linux (centOS)安装 oracle 11g 以及卸载oracle
目录 首先.1. 一.参数以及环境配置 1.创建用户和组 2.创建数据库软件目录和数据文件存放目录 3.配置oracle用户的环境变量 4.修改linux内核,修改/etc/sysctl.conf文件 ...
- nginx的变量参数 详解
$args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...
- hadoop day 5
1.Zookeeper Zookeeper的安装和配置(集群模式) 1)在conf目录下创建一个配置文件zoo.cfg, tickTime=2000——心跳检测的时间间隔(ms) dataDir=/U ...
- 类Shiro权限校验框架的设计和实现
前言: 之前简单集成了springmvc和shiro用于后台管理平台的权限控制, 设计思路非常的优美, 而且编程确实非常的方便和简洁. 唯一的不足, 我觉得配置稍有些繁琐. 当时我有个小想法, 觉得可 ...
- strstr函数的运用
strstr函数用于搜索一个字符串在另一个字符串中的第一次出现,该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false.
- 2018.4.27 python使用过的第三方库
Flask flask-login flask-sqlalchemy flask-mail psutil lvm2py oss2 python-ldap pyudev pyOpenSSL urllib ...
- java.io.EOFException ValueOperations.increment()操作后,获取值时有的bug
---恢复内容开始--- 今天使用spring-data-redis包操作redis,就是简单的使用redis的计数功能,在redis中的操作命令如:incr key;get key; 这两步操作使用 ...
- 全志A33 lichee 修改开机图片
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 首先要知道开机图片存在哪里? ...