JZOJ.5331【NOIP2017模拟8.23】壕游戏
Description
Input
Output
Sample Input
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
Sample Output
16
Data Constraint
Hint
类似于一种可撤销的贪心,不难想到这是费用流的模型。
考虑到我们实际会用到的边比实际的边少很多,我们可以动态建边,以减少空间的使用,即当流过了一条边之后再建立第二次流过需要的边(如果有第二次的话)。
然后建立超级源点和超级汇点,跑个费用流就可以了..
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define M 4000105 6 #define N 1005 7 using namespace std; 8 bool visit[N]; 9 int head[N],pre[N],num,n,m,k,s,dis[N],team[M*2],l,r,ans; 10 struct data{ 11 int next,to,flow,power,st,a,c,er; 12 }line[M]; 13 void add(int u,int v,int x,int y,int z,int w){ 14 num++; 15 line[num].st=u; 16 line[num].to=v; 17 line[num].next=head[u]; 18 line[num].flow=w; 19 line[num].power=x+y; 20 line[num].a=x; 21 line[num].c=z; 22 line[num].er=num+1; 23 head[u]=num; 24 num++; 25 line[num].st=v; 26 line[num].to=u; 27 line[num].next=head[v]; 28 line[num].flow=0; 29 line[num].power=-x-y; 30 line[num].a=x; 31 line[num].c=z; 32 line[num].er=num-1; 33 head[v]=num; 34 } 35 void SPFA(){ 36 int u=0; 37 l=0,r=1; 38 team[1]=0; 39 visit[0]=true; 40 dis[0]=0; 41 while (l<r){ 42 u=team[++l]; 43 for (int v=0,i=head[u];i;i=line[i].next){ 44 v=line[i].to; 45 if ((dis[v]>dis[u]+line[i].power)&&(line[i].flow)){ 46 dis[v]=dis[u]+line[i].power; 47 pre[v]=i; 48 if (visit[v]==false){ 49 team[++r]=v; 50 visit[v]=true; 51 } 52 } 53 visit[u]=false; 54 } 55 } 56 if (pre[n+1]==-1) ans=-1; 57 } 58 void solve(){ 59 ans+=dis[n+1]; 60 int i=pre[line[pre[n+1]].st]; 61 do{ 62 line[i].flow--; 63 line[line[i].er].flow++; 64 line[i].c--; 65 if (line[i].c>0) 66 add(line[i].st,line[i].to,line[i].a,line[i].power,line[i].c,1); 67 line[i].c=0; 68 line[line[i].er].c=0; 69 i=pre[line[i].st]; 70 }while (line[i].to!=1); 71 } 72 int main(){ 73 freopen("game.in","r",stdin); 74 freopen("game.out","w",stdout); 75 scanf("%d%d%d%d",&n,&m,&k,&s); 76 num=0; 77 add(0,1,0,0,99999999,99999999); 78 for (int u,i=1;i<=s;++i){ 79 scanf("%d",&u); 80 add(u,n+1,0,0,99999999,99999999); 81 } 82 for (int i=1,u,v,x,y,z;i<=m;i++){ 83 scanf("%d%d%d%d%d",&u,&v,&x,&y,&z); 84 add(u,v,x,y,z,1); 85 } 86 ans=0; 87 while (k--){ 88 for (int i=0;i<=n+1;++i) 89 dis[i]=99999999,visit[i]=false; 90 pre[n+1]=-1; 91 SPFA(); 92 if (ans==-1) break; 93 solve(); 94 } 95 printf("%d\n",ans); 96 return 0; 97 }
神奇的代码
改了一个晚上终于发现原来一条边流完后建立另一条边时原来边的C值(可流过次数)要清零QAQ)
当时考试的时候看出来是网络流不想写随便写了个SPFA水了水...
转载于:https://www.cnblogs.com/Lanly/p/7420597.html
JZOJ.5331【NOIP2017模拟8.23】壕游戏相关推荐
- 我是大富豪php源码,最全大富豪3.4源码【自用可运营】含23款子游戏+可控制输赢工具...
最全大富豪3.4源码[自用可运营]含23款子游戏,可用的口袋支付,全套工具 大富豪问题比较多,不是说论坛上的大富豪不能用,只是东西比较散,需要自己拼起来,现在我为大家整理和修复好一套可用的! 可能还会 ...
- Java黑皮书课后题第8章:*8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1。让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了
*8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1.让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了 题目 题目描述与运行示例 破题 代码 题目 题 ...
- Java黑皮书课后题第7章:**7.23(游戏:储物柜难题)一个学校有100个储物柜和100个学生。所有的储物柜在上学的第一天都是关着的。…在所有学生都经过教学楼并且改变柜子之后,哪些柜子是开着的?
7.23(游戏:储物柜难题)一个学校有100个储物柜和100个学生.所有的储物柜在上学的第一天都是关着的.-在所有学生都经过教学楼并且改变柜子之后,哪些柜子是开着的? 题目 题目描述 破题 代码 运行 ...
- python编程手机模拟点击_python模拟点击玩游戏的实例讲解
小编发现很多小伙伴都喜欢玩一些游戏,而手游因为玩的场景限制不多,所以受众的人更多.游戏里有很多重复的任务需要我们完成,虽然过程非常无聊,但是为了任务奖励还是有很多小伙伴不厌其烦的去做.那么,有没有什么 ...
- Pyhton之模拟石头剪子布游戏篇
石头剪子布游戏规则:石头>剪子来,剪子>布,布>石头.如果双方出示了一样的手势,就是平局. # coding :UTF_8 # 开发团队 :心心相印 # 开发人员 :机器人小白 # ...
- 实验内容:编写程序,模拟抓狐狸小游戏。假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在
'''编写程序,模拟抓狐狸小游戏.假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口, 然后玩家随机打开一个洞口,如果里面有狐狸就抓到了.如果洞口里没有狐狸就第二天再来抓, 但是第二天狐狸会在玩 ...
- 模拟蒙蒂霍尔悖论游戏
实验报告 模拟蒙蒂霍尔悖论游戏 实验目的 (1)了解蒙蒂很尔悖论的内容和游戏规则. (2)熟练运用字典方法和集合运算. (3)熟练运用异常处理结构,防止用户非法输人. (4)了解断言语句assert的 ...
- python3模拟抓狐狸小游戏
编写程序,模拟抓狐狸小游戏.假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了.如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前 ...
- 用python写一个简单的网页游戏_python模拟点击玩游戏的实例讲解
小编发现很多小伙伴都喜欢玩一些游戏,而手游因为玩的场景限制不多,所以受众的人更多.游戏里有很多重复的任务需要我们完成,虽然过程非常无聊,但是为了任务奖励还是有很多小伙伴不厌其烦的去做.那么,有没有什么 ...
最新文章
- Ubuntu磁盘空间如何扩容
- Win XP远程桌面双管理员同时登录
- Bottle源码阅读(3) HeaderDict
- 1349. 修理牛棚【难度: 中 / 思维 贪心】
- 通配符 不是jpg 结尾文件_Struts(十九)- 使用使用通配符匹配
- Apache Flink在 bilibili 的多元化探索与实践
- 梯度与梯度下降法详解
- linux读取.data文件,[20121227]v$datafile访问是从数据文件获取信息吗.txt
- 如何截获打印机文件_打印、复印还不会,如何在办公室里混?全程详细教学
- react.lazy 路由懒加载_Vue面试题: 如何实现路由懒加载?
- 推荐两款工具给爱做实验的人
- Delphi – 我的代码之简单五子棋
- 不是技术牛人,如何拿到国内IT巨头的Offer(转载)
- atitit.系统托盘图标的设计java swing c# .net c++ js
- FFmpeg安装及将rtsp流转hls协议流通过nginx进行视频直播
- 【无标题】二进制STL文件解析 计算面积和体积与根据高度计算部分体积
- 支付宝信用贷豪掷38亿抢客,微粒贷不怂
- 人工智能专业计算机毕业设计选题推荐
- 据为己有!这位985博导把审稿的文章拒了,自己投!
- java实现创蓝短信
热门文章
- java学生喂养宠物
- cmd下提示“不是内部或外部命令,也不是可运行的程序或批处理文件
- 关于如何使用打码平台识别验证码
- linux bios密码设置时间,linux忘记root密码及时间设定
- 我的世界怎么在服务器中显示键位,我的世界神奇宝贝mod怎么玩 基本键位介绍...
- WAP(手机网站)基础知识
- 求学贵在主动、坚持——兼谈学生行为礼仪
- WLAN驱动分析文档_gzc126_新浪博客
- Android 卸载监听详解
- Redis入门【安装,常用类型,常用命令行命令】