P2598 [ZJOI2009]狼和羊的故事(网络流)
源点和所有狼连 $inf$ 的边
所有羊和汇点连 $inf$ 的边
所有点向四周连 $1$ 的边
这样所有狼和羊之间的边都被割掉了
统计最小割就好辣
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 100005
#define inf 100000005
const int d1[]={,,-,};
const int d2[]={,,,-};
int n,m,w,d[N],cur[N],S,T; bool vis[N];
queue <int> h;
int cnt=,hd[N],nxt[N],ed[N],poi[N],val[N];
inline void adde(int x,int y,int v){
nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
ed[x]=cnt, poi[cnt]=y, val[cnt]=v;
}
inline void link(int x,int y,int v){adde(x,y,v),adde(y,x,);}
inline int id(int x,int y){return (x-)*m+y;}
bool bfs(){
memset(vis,,sizeof(vis));
h.push(S); vis[S]=;
while(!h.empty()){
int x=h.front(); h.pop();
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(!vis[to]&&val[i])
vis[to]=,d[to]=d[x]+,h.push(to);
}
}return vis[T];
}
int dfs(int x,int a){
if(x==T||a==) return a;
int F=,f;
for(int i=cur[x];i;i=nxt[i]){
cur[x]=i;int to=poi[i];
if(d[to]==d[x]+&&(f=dfs(to,min(a,val[i])))>)
a-=f,F+=f,val[i]-=f,val[i^]+=f;
}return F;
}
int dinic(){
int re=;
while(bfs()){
for(int i=;i<=T;++i) cur[i]=hd[i];
re+=dfs(S,inf);
}return re;
}
void draw(int x,int y){
scanf("%d",&w); int p=id(x,y);
for(int i=;i<;++i){
int r1=x+d1[i],r2=y+d2[i];
if(r1<||r1>n||r2<||r2>m) continue;
link(p,id(r1,r2),);
}
if(w==) link(S,p,inf);
if(w==) link(p,T,inf);
}
int main(){
scanf("%d%d",&n,&m);
S=n*m+; T=S+;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
draw(i,j);
printf("%d",dinic());
return ;
}
P2598 [ZJOI2009]狼和羊的故事(网络流)的更多相关文章
- 洛谷$P2598\ [ZJOI2009]$狼和羊的故事 网络流
正解:网络流 解题报告: 传送门! 昂显然考虑最小割鸭$QwQ$,就考虑说每个土地要么属于羊要么属于狼,然后如果一条边上是栅栏一定是相邻两边所属不同. 所以考虑给所有羊向$S$连$inf$,所有狼向$ ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...
- 洛谷 P2598 [ZJOI2009]狼和羊的故事 解题报告
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" \(Orez\)听到这首歌, ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么 ...
- 洛谷P2598 [ZJOI2009]狼和羊的故事 题解
题目链接: https://www.luogu.org/problemnew/show/P2598 分析: 我们知道此题的目的是将狼和羊分割开,很容易想到狼在S,羊在T中. 首先,我们可以在狼,羊,空 ...
- 【bzoj1412】[ZJOI2009]狼和羊的故事 网络流最小割
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- 洛谷 P2598 [ZJOI2009]狼和羊的故事
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- 洛谷P2598 [ZJOI2009]狼和羊的故事
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流
显然是个最小割嘛! 一开始我是这么建图的: 源点向狼连INF 羊向汇点连INF 每两个相邻格子间连双向边,边权为1 然后T成狗 后来我是这么建图的: 源点向狼连INF 羊向汇点连INF 狼和空地向相邻 ...
随机推荐
- Python 学习笔记9 循环语句 For in
For in 循环主要适用于遍历一个对象中的所有元素.我们可以使用它遍历列表,元组和字典等等. 其主要的流程如下:(图片来源于: https://www.yiibai.com/python/pytho ...
- TNS-12560: TNS: 协议适配器错误同时伴有TNS-00584: 有效节点检查配置错误的解决方法
:修改/home/oracle/app/product/11.2.0/db_1/network/admin/sqlnet.ora(与listener.ora同一目录) 增加白名单: tcp.valid ...
- js初级练习
知识点:1.for循环的运用:2.this的使用.索引值:3自定义属性 说明:获取到的元素下文用element代替 学习涉及到的知识: 清除元素类名: element.className=" ...
- vue跳转到外部链接
<span @click="see('http://xxxx">点击跳转到xxx</span> 方法:(调用函数) See (e) { window.loc ...
- Spark入门到精通--(外传)Cloudera CDH5.5.4搭建
http://www.mamicode.com/info-detail-601202.html continue...
- jeecg中excel导出字段判空处理
我们清楚,jeecg 导出 excel 采用的是 easypoi,不知道是否遇到过这种情况: 我们以一个实体属性为例: @Excel(name="问题分类",dicCode=&qu ...
- Android Studio开发快速创建MVP框架插件AndroidMVP
转载:https://www.jianshu.com/p/60cd98bbc358 Android开发中,我们为了代码的解耦以及后期的维护方便,都会采用一些开发框架,常用的有MVC.MVP.MVVM. ...
- vs code代码对齐快捷键
vscode缩进快捷键: 选中文本: Ctrl + [ 和 Ctrl + ] 实现文本的向左移动或者向右移动: vscode代码对齐快捷键: 选中文本: Shift + ...
- levmar : Levenberg-Marquardt库编译
levmar : Levenberg-Marquardt 是非线性优化的一个库 1.使用CMake生成sln项目,编译 clapack库 在levmar工程中,打开misc.c文件,在最开始添加#in ...
- sublime There are no packages available for installation 问题的解决办法
这个是因为IPv6的原因, 因此我们需要修改我们的 /etc/hosts文件. 第一步: 执行: nm-tool 获取DNS的信息 例如: DNS: 192.168.1.11 第二步: 在/etc/h ...