【ZJOI2009】狼和羊的故事
题目
  “狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......”
  Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干!
  Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆。可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已。所以Orez决定在羊狼圈中再加入一些篱笆,还是要将羊狼分开来养。
  通过仔细观察,Orez发现狼和羊都有属于自己领地,若狼和羊们不能呆在自己的领地,那它们就会变得非常暴躁,不利于他们的成长。
  Orez想要添加篱笆的尽可能的短。当然这个篱笆首先得保证不能改变狼羊的所属领地,再就是篱笆必须修筑完整,也就是说必须修建在单位格子的边界上并且不能只修建一部分。
分析
因为用篱笆将狼和羊分开,也就是将狼和羊割成两块,那么考虑做最小割。
连边:源点s向每只狼连一条无穷大的边,然后每只羊向汇点t连一条无穷大的边,接着每只狼和每块空地向相邻的每块空地和每只羊连一条1的边。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=11105;
using namespace std;
int next[N*5],last[N],f[N*5],to[N*5],up[N*5],tot,n,m,a[111][111],d[N*10],dis[N];
int zz[4][2]=
{
 {0,1},
 {1,0},
 {0,-1},
 {-1,0}
};
int bj(int x,int y,int z)
{
	next[++tot]=last[x];
	last[x]=tot;
	to[tot]=y;
	f[tot]=z;
	up[tot]=++tot;
	up[tot]=tot-1;
	next[tot]=last[y];
	last[y]=tot;
	to[tot]=x;
	f[tot]=0;
}
int bfs()
{
	memset(dis,0,sizeof(dis));
	d[1]=0;
	dis[0]=1;
	int head=0,tail=1,k;
	while(head<tail)
	{
		k=d[++head];
		for(int i=last[k];i;i=next[i])
		{
			int j=to[i];
			if(f[i]>0 && !dis[j])
			{
				dis[j]=dis[k]+1;
				d[++tail]=j;
			}
		}
	}
	if(!dis[n*m+n]) return false;
		else return true;
}
int aug(int x,int y)
{
	if(x==n*m+n) return y;
	for(int i=last[x];i;i=next[i])
	{
		int j=to[i];
		if(dis[x]+1==dis[j] && f[i]>0)
		{
			int o=aug(j,min(y,f[i]));
			if(o>0)
			{
				f[i]-=o;
				f[up[i]]+=o;
				return o;
			}
		}
	}
	return 0;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			int pos=(i-1)*m+j;
			scanf("%d",&a[i][j]);
			if(a[i][j]==1)
				bj(0,pos,maxlongint);
			if(a[i][j]==2)
				bj(pos,n*m+n,maxlongint);
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int k=0;k<=3;k++)
			{
				int xx=i+zz[k][0],yy=j+zz[k][1];
				if(xx<1 || yy<1 || xx>n || yy>m) continue;
				int pos=(i-1)*m+j,pos1=(xx-1)*m+yy;
				if(a[i][j]!=2)
					if(a[xx][yy]!=1) bj(pos,pos1,1);
			}
	int ans=0;
	while(bfs())
		ans+=aug(0,maxlongint);
	cout<<ans<<endl;
}
												
											【ZJOI2009】狼和羊的故事的更多相关文章
- bzoj1412: [ZJOI2009]狼和羊的故事
		
空地之间开始没有连然后一直WA...题意混乱...尴尬. #include<cstdio> #include<cstring> #include<iostream> ...
 - BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
		
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
 - P2598 [ZJOI2009]狼和羊的故事(网络流)
		
P2598 [ZJOI2009]狼和羊的故事 源点和所有狼连 $inf$ 的边 所有羊和汇点连 $inf$ 的边 所有点向四周连 $1$ 的边 这样所有狼和羊之间的边都被割掉了 统计最小割就好辣 #i ...
 - 洛谷 P2598 [ZJOI2009]狼和羊的故事 解题报告
		
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" \(Orez\)听到这首歌, ...
 - 题解 P2598 【[ZJOI2009]狼和羊的故事】
		
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...
 - 【BZOJ1412】[ZJOI2009]狼和羊的故事 最小割
		
[BZOJ1412][ZJOI2009]狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想: ...
 - BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】
		
BZOJ1412 ZJOI2009 狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和 ...
 - BZOJ1412 [ZJOI2009]狼和羊的故事  【最小割】
		
1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3454 Solved: 1733 [Submit][ ...
 - P2598 [ZJOI2009]狼和羊的故事(最小割)
		
P2598 [ZJOI2009]狼和羊的故事 题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么 ...
 - 嘴巴题3 「BZOJ1412」[ZJOI2009] 狼和羊的故事
		
「BZOJ1412」[ZJOI2009] 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Or ...
 
随机推荐
- 【内部】Fiddler设置代理请求的方式
			
1.2 打开Fiiddler,设置如图步骤: 3.添加规则: 4.这里选择第三个选项: 5.选中^开始,空格结束的如图内容.复制你要代理的地址.如:http://wap.cmread.com/nap/ ...
 - centos7.5 安装python3.7
			
一,官网下载最新版python安装包 二,解压并编译安装 ,解决依赖关系 yum -y install epel-release libffi-devel zlib* ,解压编译 .tgz cd Py ...
 - JS点击img图片放大再次点击缩小JS实现 简单实用Ctrl+C+V就可以用
			
业务需要,从后台获取的图片列表,用img标签展示,用户需要查看大图.记录下来以便学习和参考.示例图如下: 放大之前: 放大之后: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto ...
 - 关于DataFram的.values
			
DataFram类型的变量a,设a有n个样本,m个特征,当执行语句b = a.values后,b为(n, m)的ndarray矩阵类型,当执行c = b.ravel()后,c为(n*m,)维行向量
 - vue--键盘修饰符以及自定义键盘修饰符
			
键盘修饰符以及自定义键盘修饰符 1.vue键盘修饰符[了解即可] 地址:https://cn.vuejs.org/v2/guide/events.html#%E6%8C%89%E9%94%AE%E4 ...
 - SpringMvc  整合mybatis项目搭建
			
1.使用idea创建maven项目 2.在项目src目录下 添加java文件夹 并设置类型为sources,添加resource文件夹 设置为resources 4.修改pom文件 添加引用 < ...
 - 微服务理论之二:面向微服务架构与传统架构、SOA对比,以及云化对比
			
一.Monolith 网上对Microservice进行介绍的文章常常以Monolith作为开头,我也不会例外.原因是,知道了Monolith的不便之后才能更容易地理解Microservice架构模式 ...
 - 7大python 深度学习框架的描述及优缺点绍
			
Theano https://github.com/Theano/Theano 描述: Theano 是一个python库, 允许你定义, 优化并且有效地评估涉及到多维数组的数学表达式. 它与GPUs ...
 - 2019.07.09 纪中_B
			
错失AK记 2019.07.09[NOIP提高组]模拟 B 组 明明今天的题都很水,可就是没蒟蒻. 写题的时候: T0一眼高精(结果没切)T1看到2啊8啊果断转二进制观察,发现都是左移几位然后空出的位 ...
 - Python和mysql的连接
			
python与mysql的连接: 说明:前提是已近安装了mysql以及可视化工具(本人装的是Navicat) 1.在cmd下下载Python的第三方数据库包:pip install pymysql: ...