P2598 [ZJOI2009]狼和羊的故事(网络流)
我个人的理解:
可以先对原图进行建模为下图
其左端是狼,右端为羊,中间是连接狼和羊的路
现在为了让狼吃不到样,就要隔断狼和羊之间的连接
也就是
在这里,我们需要隔断狼和羊之间的连接,也就是转化成最小割问题
很明显,这里的路权均为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&∑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]狼和羊的故事(网络流)相关推荐
- 洛谷P2598 [ZJOI2009]狼和羊的故事 题解
题目链接: https://www.luogu.org/problemnew/show/P2598 分析: 我们知道此题的目的是将狼和羊分割开,很容易想到狼在S,羊在T中. 首先,我们可以在狼,羊,空 ...
- 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)
题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,每个格子都有三种状态:狼.羊和空地,现在需要在相邻方格之间添加篱笆,问最少需要添加多少篱笆才能使得狼和羊分开 题目分析:最大流最小割,建图方 ...
- 洛谷P2598 [ZJOI2009]狼和羊的故事
题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干 ...
- 题解 P2598 【[ZJOI2009]狼和羊的故事】
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...
- [ZJOI2009]狼和羊的故事【最小割】
题目链接 P2598 [ZJOI2009]狼和羊的故事 要让羊和狼都区别开来,需要的最小的割是多少?每只羊向四周有4个可能的方向,每只狼也是同样的,所以每个动物向周围可以跑出4个流,我们要建立栅栏,可 ...
- BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】
BZOJ1412 ZJOI2009 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...
- bzoj1412[ZJOI2009]狼和羊的故事
bzoj1412[ZJOI2009]狼和羊的故事 题意: n*m网格,每个格子可能为狼.羊或空格.现在要在一些格子边界篱笆使羊狼分开,求最短篱笆.n,m≤100 题解: 最小割问题,建一个超级源和超级 ...
- BZOJ 1412: [ZJOI2009]狼和羊的故事
1412: [ZJOI2009]狼和羊的故事 >原题链接< Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......& ...
- [bzoj1934]: [ZJOI2009]狼和羊的故事
1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3105 Solved: 1567 [Submit][ ...
最新文章
- 【linux】在CentOS7上更改端口号时报错:Job for sshd.service failed because the control process exited with error
- 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
- 让你分分钟明白onTouchEvent事件分发
- 学习笔记100—强制免费下载 百度文库等网站上文档 以及客道巴巴文档 教程
- ES6:Reflect
- 汇编语言——输入两位数比较大小
- 爬虫 spider10——搭建elk平台,开发服务提供者
- 用好String、String[]和char[]真香(洛谷P1179题题解,Java语言描述)
- 又跑回去拿的即时通讯
- C++ (tensorRT中学习)
- 安全测试===sqlmap(壹)转载
- 远程桌面控制VC源码剖析
- 京东商城,超大型电商系统架构设计原则与实践!8页ppt详解
- 在Ubuntu安装Deepin软件
- java计算机毕业设计学生学籍信息管理系统源码+mysql数据库+lw文档+系统+调试部署
- 难上加难?女性在技术领域可以这样做……
- 宝尚网上股票缩量商场拉大盘股高潮
- MacBook 使用小鱼投屏无画面
- SpringCloud之利用FTL生成Word报表并下载
- mac如何强制退出程序?强制退出程序的六种方法
热门文章
- 令人闹心挠心的智商测试题
- 我的团队——风信子网络工作室简介
- 户外LED显示屏如何实现裸眼3D显示效果:创造逼真立体体验的新视界
- 修改Ubuntu国内镜像源地址
- jwt用户注销 PHP,关于JWT用户主动注销、强制登出、忘记密码、修改密码的一些思考...
- 关于刷新网页F5,Ctrl+F5amp;amp;Shift+F5
- .DS_Store文件
- 网站域名解析到了空间,但空间未绑定此域名
- FITC/cy3/cy5/cy7-PEG-Vitamin D
- 用AI给娃定制绘本 #麻瓜+AI混合工作流试验 9