我个人的理解:
可以先对原图进行建模为下图

其左端是狼,右端为羊,中间是连接狼和羊的路
现在为了让狼吃不到样,就要隔断狼和羊之间的连接
也就是

在这里,我们需要隔断狼和羊之间的连接,也就是转化成最小割问题
很明显,这里的路权均为1
然后分别建立源点和汇点,分别连接狼与羊,边权为inf,进行求解最小割即可

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 2e5+7;
int dir[4][4] = {{1,0},{0,1},{-1,0},{0,-1}};
struct node{int to,from;ll w;
}edge[MAXN];
class Dinic:node{public:const int inf =0x3f3f3f3f;  int head[MAXN],now[MAXN],cnt=1,n,s,t;//点数,源点,汇点int dep[MAXN],ans;void Add(int u,int v,ll w){cnt++;edge[cnt].to = v;edge[cnt].w = w;edge[cnt].from = head[u];head[u] = cnt;}void add(int u,int v,int w){Add(u,v,w);Add(v,u,0);}int bfs(){for(int i=1;i<=n;i++)dep[i] = inf;queue<int>q;q.push(s);dep[s] = 0;now[s] = head[s];while(!q.empty()){int so = q.front();q.pop();for(int i=head[so];i;i=edge[i].from){int to = edge[i].to;if(edge[i].w&&dep[to] == inf){q.push(to);now[to] = head[to];dep[to] = dep[so]+1;if(to==t) return 1;}}}return 0;}int dfs(int x,ll sum){if(x==t)return sum;ll k,res=0;for(int i=now[x];i&&sum;i = edge[i].from){now[x] = i;//当前弧优化int to = edge[i].to;if(edge[i].w&&dep[to]==dep[x]+1){k = dfs(to,min(sum,edge[i].w));if(k==0) dep[to] = inf;edge[i].w-=k;edge[i^1].w+=k;res+=k;//流量和 sum-=k;//剩余流量 } }return res;}int dini(){while(bfs())ans+=dfs(s,inf);return ans;}
};
Dinic d;
int n,m;
int cal(int x,int y)
{return (x-1)*m+y;
}
int a[105][105];
int main()
{cin>>n>>m;d.n = n*m+2;d.s = n*m+1;d.t = n*m+2;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);if(a[i][j]==1)d.add(d.s,cal(i,j),d.inf);if(a[i][j]==2)d.add(cal(i,j),d.t,d.inf);}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<4;k++)  {int tx=i+dir[k][0];int ty=j+dir[k][1];if(tx<=n and ty<=m and tx>=1 and ty>=1)d.add(cal(i,j),cal(tx,ty),1);}cout<<d.dini()<<endl;
}

P2598 [ZJOI2009]狼和羊的故事(网络流)相关推荐

  1. 洛谷P2598 [ZJOI2009]狼和羊的故事 题解

    题目链接: https://www.luogu.org/problemnew/show/P2598 分析: 我们知道此题的目的是将狼和羊分割开,很容易想到狼在S,羊在T中. 首先,我们可以在狼,羊,空 ...

  2. 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,每个格子都有三种状态:狼.羊和空地,现在需要在相邻方格之间添加篱笆,问最少需要添加多少篱笆才能使得狼和羊分开 题目分析:最大流最小割,建图方 ...

  3. 洛谷P2598 [ZJOI2009]狼和羊的故事

    题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干 ...

  4. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  5. [ZJOI2009]狼和羊的故事【最小割】

    题目链接 P2598 [ZJOI2009]狼和羊的故事 要让羊和狼都区别开来,需要的最小的割是多少?每只羊向四周有4个可能的方向,每只狼也是同样的,所以每个动物向周围可以跑出4个流,我们要建立栅栏,可 ...

  6. BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】

    BZOJ1412 ZJOI2009 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...

  7. bzoj1412[ZJOI2009]狼和羊的故事

    bzoj1412[ZJOI2009]狼和羊的故事 题意: n*m网格,每个格子可能为狼.羊或空格.现在要在一些格子边界篱笆使羊狼分开,求最短篱笆.n,m≤100 题解: 最小割问题,建一个超级源和超级 ...

  8. BZOJ 1412: [ZJOI2009]狼和羊的故事

    1412: [ZJOI2009]狼和羊的故事 >原题链接< Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......& ...

  9. [bzoj1934]: [ZJOI2009]狼和羊的故事

    1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3105  Solved: 1567 [Submit][ ...

最新文章

  1. 【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
  2. 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
  3. 让你分分钟明白onTouchEvent事件分发
  4. 学习笔记100—强制免费下载 百度文库等网站上文档 以及客道巴巴文档 教程
  5. ES6:Reflect
  6. 汇编语言——输入两位数比较大小
  7. 爬虫 spider10——搭建elk平台,开发服务提供者
  8. 用好String、String[]和char[]真香(洛谷P1179题题解,Java语言描述)
  9. 又跑回去拿的即时通讯
  10. C++ (tensorRT中学习)
  11. 安全测试===sqlmap(壹)转载
  12. 远程桌面控制VC源码剖析
  13. 京东商城,超大型电商系统架构设计原则与实践!8页ppt详解
  14. 在Ubuntu安装Deepin软件
  15. java计算机毕业设计学生学籍信息管理系统源码+mysql数据库+lw文档+系统+调试部署
  16. 难上加难?女性在技术领域可以这样做……
  17. 宝尚网上股票缩量商场拉大盘股高潮
  18. MacBook 使用小鱼投屏无画面
  19. SpringCloud之利用FTL生成Word报表并下载
  20. mac如何强制退出程序?强制退出程序的六种方法

热门文章

  1. 令人闹心挠心的智商测试题
  2. 我的团队——风信子网络工作室简介
  3. 户外LED显示屏如何实现裸眼3D显示效果:创造逼真立体体验的新视界
  4. 修改Ubuntu国内镜像源地址
  5. jwt用户注销 PHP,关于JWT用户主动注销、强制登出、忘记密码、修改密码的一些思考...
  6. 关于刷新网页F5,Ctrl+F5amp;amp;Shift+F5
  7. .DS_Store文件
  8. 网站域名解析到了空间,但空间未绑定此域名
  9. FITC/cy3/cy5/cy7-PEG-Vitamin D
  10. 用AI给娃定制绘本 #麻瓜+AI混合工作流试验 9