题目背景

小R正在玩一个战争游戏。游戏地图是一个M行N列的矩阵,每个格子可能是障碍物,也可能是空地,在游戏开始时有若干支敌军分散在不同的空地格子中。每支敌军都可以从当前所在的格子移动到四个相邻的格子之一,但是不能移动到包含障碍物的格子。如果敌军移动出了地图的边界,那么战争就失败了。

题目描述

现在你的任务是,在敌军开始移动前,通过飞机轰炸使得某些原本是空地的格子变得不可通行,这样就有可能阻止敌军移出地图边界(出于某种特殊的考虑,你不能直接轰炸敌军所在的格子)。由于地形不同的原因,把每个空地格子轰炸成不可通行所需的xx数目可能是不同的,你需要计算出要阻止敌军所需的最少的xx数。

输入输出格式

输入格式:

输入文件的第一行包含两个数M和N,分别表示矩阵的长和宽。接下来M行,每行包含用空格隔开的N个数字,每个数字表示一个格子的情况:若数字为-1,表示这个格子是障碍物;若数字为0,表示这个格子里有一支敌军;若数字为一个正数x,表示这个格子是空地,且把它轰炸成不可通行所需的xx数为x。

输出格式:

输出一个数字,表示所需的最少xx数。数据保证有解存在。

输入输出样例

输入样例#1:

4 3
1 2 1
1 10 1
1 0 -1
1 1 1

输出样例#1:

6

说明

对50%的数据,1 ≤ M,N ≤ 10

对100%的数据,1 ≤ M,N ≤ 30

矩阵里的每个数不超过100

最小割套路题,拆点限流量,把0看成源,相邻的点之间连边,边界的点向汇连边,最小割就是答案。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1805;
#define pb push_back
const int inf=1<<30;
vector<int> g[maxn];
struct lines{int to,flow,cap;
}l[maxn*233];
int S,t=-1,T,d[maxn],cur[maxn];
bool v[maxn];inline void add(int from,int to,int cap){l[++t]=(lines){to,0,cap},g[from].pb(t);l[++t]=(lines){from,0,0},g[to].pb(t);
}inline bool BFS(){memset(v,0,sizeof(v));queue<int> q; q.push(S);v[S]=1,d[S]=0;int x; lines e;while(!q.empty()){x=q.front(),q.pop();for(int i=g[x].size()-1;i>=0;i--){e=l[g[x][i]];if(e.flow<e.cap&&!v[e.to]) v[e.to]=1,d[e.to]=d[x]+1,q.push(e.to);}}return v[T];
}int dfs(int x,int A){if(x==T||!A) return A;int flow=0,f,sz=g[x].size();for(int &i=cur[x];i<sz;i++){lines &e=l[g[x][i]];if(d[x]+1==d[e.to]&&(f=dfs(e.to,min(A,e.cap-e.flow)))){A-=f,flow+=f;e.flow+=f,l[g[x][i]^1].flow-=f;if(!A) break;}}return flow;
}inline int max_flow(){int an=0;while(BFS()){memset(cur,0,sizeof(cur));an+=dfs(S,inf);}return an;
}int n,m,id[233][233],cnt=0,a[233][233];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};inline void build(){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) if(a[i][j]>0) id[i][j]=++cnt;S=0,T=cnt*2+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) if(a[i][j]>=0){if(a[i][j]>0){add(id[i][j],id[i][j]+cnt,a[i][j]);if(i==1||i==n||j==1||j==m) add(id[i][j]+cnt,T,inf);}for(int o=0,x,y;o<4;o++){x=i+dx[o],y=j+dy[o];if(x&&x<=n&&y&&y<=m&&id[x][y]) add(a[i][j]?id[i][j]+cnt:S,id[x][y],inf);}}
}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);build();printf("%d\n",max_flow());return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/9073460.html

[TJOI2009] 战争游戏相关推荐

  1. skype安卓手机版_危险的战争游戏安卓手机版下载-危险的战争下载v1.0.13

    危险的战争游戏安卓手机版是一款非常好玩的简约画风的手机战争策略游戏,在危险的战争游戏安卓手机版游戏中玩家将控制自己的军队进行战斗,游戏玩法简单有趣,感兴趣的朋友赶紧下载危险的战争游戏安卓手机版开始游戏 ...

  2. 太空java游戏_JavaSpaceWar 一个基于 语言编写的太空战争游戏,包含所有图像和声音资源,便 习理解使用 Game Program 238万源代码下载- www.pudn.com...

    文件名称: JavaSpaceWar下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 506 KB 上传时间: 2014-03-18 下载次数: 0 提 供 者: ...

  3. unity塔防游戏怪物转向_防御之迷无限战争游戏下载-防御之迷无限战争游戏安卓版 v1.0...

    防御之迷无限战争游戏:这是一款星际风格的策略塔防游戏,玩家在游戏中需要对抗可怕的异形生物,这些怪物会不断入侵地球,你要做的就是建造不同的炮台,炮台等级高你才能快速杀死这些怪物保护地区的安全! 防御之迷 ...

  4. 一个以东晋北伐为背景的战略战术类古代战争游戏

    一个以东晋北伐为背景的战略战术类古代战争游戏 中国五千年历史,最让我觉得神秘,充满诱人之处的却是很多人不太了解的五胡 乱华南北朝.说来好笑,对这段历史的偏好居然是因为自以为的那些不同凡响的 人名.祖逖 ...

  5. atlas单机模式代码_为什么说海盗战争游戏《ATLAS》很佛系?看看这些玩法就知道了...

    作为Steam目前比较受欢迎的航海游戏,海盗战争游戏<ATLAS>有着极具特色的航海玩法.这款游戏不仅有Steam版本,还有Xbox版本,并且实现了互通,现在很多国人玩家都热衷于在< ...

  6. java swing游戏源码-宇宙战争游戏,Java飞船射击游戏

    原文:java swing游戏源码-宇宙战争游戏,Java飞船射击游戏 源代码下载地址: http://www.zuidaima.com/share/1880717151603712.htm 一个基于 ...

  7. python之星河战争游戏

    效果图: 开始界面: 游戏中: gameover! 文件结构: game_file:所有游戏逻辑相关的源码: rec:游戏相关的图片.音乐资源: main.py: 游戏的启动文件: 所用到的图片: 源 ...

  8. 全面战争模拟器 for Mac(模拟战争游戏)

    全面战争模拟器 for Mac是一款非常好玩的策略.模拟类型的游戏,你可以在全面战争模拟器特别版中经历各个时代的战争,多个不同的场景供你选择,这里提供Totally Accurate Battle S ...

  9. 魔兽争霸RPG游戏-军团战争-游戏经验总结

    终于要写这篇了,上一篇是个意外. 2015年关注,一代鬼王Xun和GGL比赛.晚上11点之后,经常有水友赛.主播xun,会带着一帮小弟,玩一些游戏. 比如魔兽争霸6v6,2v2,RPG游戏-军团战争, ...

最新文章

  1. Maya与Substance Painter风格化材质阴影和照明学习教程
  2. MySQL数据库右连接查询right join ... on
  3. 窃隐私、放高利贷,输入法的骚操作真不少!
  4. PLSQL_SQL Loader的概念和用法(概念)
  5. python电脑配置要求cpu-Python限制内存和CPU使用量的方法(Unix系统适用)
  6. spring security源码分析心得
  7. Android --- PagerAdapter的使用方法详细讲解
  8. vue导入静态js_如何在vue js中加载静态图像
  9. 类的静态成员函数带来了什么好处,应该在什么时候使用?
  10. Oracle体系结构三(学习笔记)
  11. Ciesz się Polską
  12. iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)
  13. Java-重载、重写(冷静分析)
  14. php 文件目录操作相关函数file_exists mkdir chmod touch
  15. My 2007 Fash game: Elite Shooter
  16. 最熟悉的陌生人| 长文理解基因本体论 (Gene Ontology, GO)
  17. 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))
  18. DirectPlay分组功能 (转)
  19. FileZilla Server 中文版
  20. linux驱动调试技巧:灌寄存器---------以mma7660为例

热门文章

  1. JPA 系列教程12-复合主键-2个@Id+@IdClass
  2. hive实现根据用户分组,按用户记录求上下两条记录的时间差
  3. 【U3D】掉落物设计
  4. PHP从千千静听服务器获取lrc歌词
  5. Perform 浮动工具栏 无标题窗口的移动
  6. Jlink-v8 灯不亮重新烧写固件的办法
  7. Android自定义控件ImageViwe(三)——随手指进行图片的缩放
  8. 四、Spring中使用@Conditional按照条件注册Bean
  9. python 线程间通信之Condition, Queue
  10. Homebrew简介和基本使用