题目传送门(内部题18)


输入格式

第一行包括四个数$n,m,k,s$表示有$n$个剧情点,$m$个关卡,要玩$k$次游戏,$s$个完结点接下来一行包含$s$个数,代表$s$个完结点的编号。
接下来$m$行,每行五个正整数$x_i,y_i,A_i,B_i,C_i$,代表第$i$号关卡从$x_i$号剧情点连向$y_i$号剧情点,$A_i,B_i,C_i$意义如题目描述。


输出格式

如果不能通关输出$-1$,否则输出一个整数,代表至少需要的软妹币值。


样例

样例输入:

6 8 2 2
4 5
1 2 4 0 2
1 3 5 0 2
3 4 1 5 1
2 5 1 0 1
4 6 4 2 2
5 6 0 4 2
1 5 5 9 2
2 6 4 5 2

样例输出:

16


数据范围与提示

样例解释:

第一次从$1−>2−>5$,费用为$5$。
第二次从$1−>3−>4$,费用为$11$。

数据范围:

对于$30\%$的数据,$A_i=0$。
对于另外$20\%$的数据,游戏为一条链。
对于$100\%$的数据,$1\leqslant n\leqslant 1,000,1\leqslant m\leqslant 20,000,1\leqslant k\leqslant 200,A_i,B_i\geqslant 0,1\leqslant C_i\leqslant k$。
保证答案在$int$范围内。


题解

注意到$k$只有200,但是又有谁能想到是费用流呢?

实际上,我的思路和题解稍有偏差。

建边的时候记录上边的$A,B$,每走一次就让花费增加,退流的时候再剪掉就好了,缺点就是每次只能流一个,不然有可能会错过最优答案。

时间复杂度:$\Theta(m\times k+n\times k^2)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec
{int nxt;int to;int w;int f;int a;
}e[100001];
int head[5001],cnt=1;
int n,m,k,s;
int S,T;
int que[100001],pre[50001],dis[50001];
bool vis[50001];
int ans;
void add(int x,int y,int w,int f,int a)
{e[++cnt].nxt=head[x];e[cnt].to=y;e[cnt].w=w;e[cnt].f=f;e[cnt].a=a;head[x]=cnt;
}
bool bfs()
{memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[S]=0;vis[S]=1;int he=1,ta=1;que[ta]=S;while(he<=ta){for(int i=head[que[he]];i;i=e[i].nxt)if(e[i].w&&dis[que[he]]+e[i].f<dis[e[i].to]){dis[e[i].to]=dis[que[he]]+e[i].f;pre[e[i].to]=i;if(!vis[e[i].to]){vis[e[i].to]=1;que[++ta]=e[i].to;}}vis[que[he]]=0;he++;}return dis[T]!=1061109567;
}
void update()
{int flag=T;while(flag!=S){int x=pre[flag];ans+=e[x].f;e[x].w--;e[x^1].w++;e[x].f+=e[x].a;e[x^1].f-=e[x].a;flag=e[x^1].to;}
}
int main()
{scanf("%d%d%d%d",&n,&m,&k,&s);S=n+1,T=n+2;add(S,1,k,0,0);add(1,S,0,0,0);for(int i=1;i<=s;i++){int x;scanf("%d",&x);add(x,T,k,0,0);add(T,x,0,0,0);}for(int i=1;i<=m;i++){int x,y,a,b,c;scanf("%d%d%d%d%d",&x,&y,&a,&b,&c);add(x,y,c,b+a,a);add(y,x,0,-b,a);}cnt=0;while(bfs()){update();cnt++;}if(cnt<k)puts("-1");else printf("%d",ans);return 0;
}


rp++

转载于:https://www.cnblogs.com/wzc521/p/11447008.html

[CSP-S模拟测试]:壕游戏(费用流)相关推荐

  1. 5331. 【NOIP2017提高A组模拟8.23】壕游戏 费用流 动态连边

    题意:n个点m条边,每条边有一个经过次数限制ci,假设经过了x次,第x次费用为ai*x+bi,有s个终点,要跑k次,问最小总费用多少. 巨鬼畜,连边只按照第一次的连,然后费用流的时候每流一条边然后再连 ...

  2. 有没有测试游戏天赋的软件,抖音电竞天赋测试小游戏预约-电竞天赋测试app安卓版_第一手游网...

    电竞天赋测试小游戏是一款能够模拟测试玩家游戏天赋的趣味app,通过完成答题即可获取相关的天赋分数,不过需要注意的是要按照自己的第一直觉进行作答.包含多种擅长类型,无论是团战领导者还是高端秀操作都能一键 ...

  3. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  4. Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...

  5. 【BZOJ3252】攻略 DFS序+线段树(模拟费用流)

    [BZOJ3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...

  6. 【wikioi】1033 蚯蚓的游戏问题(费用流)

    http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每 ...

  7. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)

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

  8. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...

  9. BZOJ 4849 [NEERC2016] Mole Tunnels (模拟费用流)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...

最新文章

  1. 《跟菜鸟学Cisco UC部署实战》-第 1 章 规划-课件(一共12章,免费)
  2. 基于深度学习的医学图像配准综述
  3. 从 exe.config 读取appSettings 中的配置数据
  4. 云计算使关系数据库逐渐落伍(转载)
  5. 水很深,我还是下去了
  6. 数据库连接池的工作原理
  7. @RequestMapping 和 @GetMapping @PostMapping 区别
  8. 两个栈实现队列与两个队列实现栈
  9. linux:tr的用法
  10. linux怎么设置ftp为主动模式,linux设置ftp服务器为主动模式
  11. Linux共享内存(二) (转载)
  12. 华南师范大学计算机学院重修,选修课挂科有什么影响 还需要重修吗
  13. 格雷码的生成详解(C++)(附格雷码对照表)
  14. 化解字符串不能超过8000的方法及交叉表的处理
  15. 最新好看的自适应手机版软件APP下载类网站源码,游戏软件应用网站源码,自适应手机端Pbootcms模板
  16. 腾讯云主机免费升级有感而发
  17. b站视频突破2倍方法,3倍?4倍?可以开10倍!!!
  18. 网络工程师的python之路pdf_网络工程师的Python之路:网络运维自动化实战
  19. python微信朋友圈刷图_用python中的itchat可视化微信朋友圈
  20. 什么是过拟合、欠拟合现象以及如何缓解?

热门文章

  1. 编写Java程序,以继承和多态思想模拟饲养员喂养不同动物的不同行为
  2. 数据分析金庸武侠经典人物,我们喜欢江湖中的这群人
  3. 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验三
  4. 轻松注册WinRAR的小方法
  5. React教程(六)——使用 create-react-app 快速构建 React 开发环境
  6. 在excel中执行Sql语句,实现复杂查询
  7. 编程当中 %lg 是什么? (编程语言常见数据类型与占位符的关系以及所占空间的大小)
  8. 黑客们的往事(连载十) 凯文·米特尼克
  9. java运行时加音乐_Java运行窗体/程序添加自定义背景音乐
  10. overleaf word count 字数统计 报错 解决办法