1412. [ZJOI2009]狼和羊的故事【最小割】
Description
Input
Output
Sample Input
2 2
1 1
Sample Output
2
数据范围
10%的数据 n,m≤3
30%的数据 n,m≤20
100%的数据 n,m≤100
最小割……好久不做网络流这么简单的建模都不会了……
把狼和周围的空地和羊连边,空地和周围的空地和羊连边
S连狼,INF E连羊,INF
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#define MAXM (1000000+10)
#define MAXN (30000+10)
#define id(x,y) (x-1)*m+y
using namespace std;
struct node
{
int Flow;
int next;
int to;
} edge[MAXM*];
int Depth[MAXN];
int head[MAXN],num_edge;
int n,m,s,e,x,y,INF,a[][];
int dx[]= {,,-,,},dy[]= {,,,,-};
queue<int>q; void add(int u,int v,int l)
{
edge[++num_edge].to=v;
edge[num_edge].Flow=l;
edge[num_edge].next=head[u];
head[u]=num_edge;
} bool Bfs(int s,int e)
{
memset(Depth,,sizeof(Depth));
q.push(s);
Depth[s]=;
while (!q.empty())
{
int x=q.front();
q.pop();
for (int i=head[x]; i!=; i=edge[i].next)
if (!Depth[edge[i].to] && edge[i].Flow>)
{
Depth[edge[i].to]=Depth[x]+;
q.push(edge[i].to);
}
}
return Depth[e];
} int Dfs(int x,int low)
{
int Min,f=;
if (x==e || low==)
return low;
for (int i=head[x]; i!=; i=edge[i].next)
if (edge[i].Flow> && Depth[edge[i].to]==Depth[x]+ && (Min=Dfs(edge[i].to,min(low,edge[i].Flow))))
{
edge[i].Flow-=Min;
edge[((i-)^)+].Flow+=Min;
low-=Min;
f+=Min;
if (low==) return f;
}
if (!f) Depth[x]=-;
return f;
} int Dinic(int s,int e)
{
int Ans=;
while (Bfs(s,e))
Ans+=Dfs(s,0x7fffffff);
return Ans;
} int main()
{
memset(&INF,0x7f,sizeof(INF));
s=,e=;
scanf("%d%d",&n,&m);
for (int i=; i<=n; ++i)
for (int j=; j<=m; ++j)
{
scanf("%d",&a[i][j]);
if (a[i][j]==) add(s,id(i,j),INF),add(id(i,j),s,);
if (a[i][j]==) add(id(i,j),e,INF),add(e,id(i,j),);
for (int k=; k<=; ++k)
{
int x=i+dx[k],y=j+dy[k];
if (x< || x>n || y< || y>m) continue;
if (a[i][j]== && a[x][y]!= || a[i][j]== && a[i][j]!=)
add(id(i,j),id(x,y),),add(id(x,y),id(i,j),);
}
}
printf("%d\n",Dinic(s,e));
}
1412. [ZJOI2009]狼和羊的故事【最小割】的更多相关文章
- BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
- 【BZOJ1412】[ZJOI2009]狼和羊的故事 最小割
[BZOJ1412][ZJOI2009]狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想: ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...
- BZOJ1412[ZJOI2009]狼和羊的故事——最小割
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- [ZJOI2009] 狼与羊的故事 - 最小割
给定一个\(N \times M\)方格矩阵,每个格子可在\(0,1,2\)中取值.要求在方格的边上进行划分,使得任意联通块内不同时包含\(1\)和\(2\)的格子. ________________ ...
- bzoj 1412 [ZJOI2009]狼和羊的故事(最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1412 [题意] 在一个n*m的格子中,将羊和狼隔开的最小代价. [思路] 最小割. 由 ...
- bzoj 1412: [ZJOI2009]狼和羊的故事
http://www.lydsy.com/JudgeOnline/problem.php?id=1412 超级源点连向所有的狼,超级汇点连向所有羊,流量为INF 相邻连边流量为1,最小割 #inclu ...
- BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流
显然是个最小割嘛! 一开始我是这么建图的: 源点向狼连INF 羊向汇点连INF 每两个相邻格子间连双向边,边权为1 然后T成狗 后来我是这么建图的: 源点向狼连INF 羊向汇点连INF 狼和空地向相邻 ...
- 1412: [ZJOI2009]狼和羊的故事
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4017 Solved: 2037[Submit][Status][Discuss] Descript ...
随机推荐
- Details.cshtml(118): error CS1001: 应输入标识符
写了没定义 @Html.DisplayFor(model => model.)
- ASP.NET 解决在点击Button执行服务器事件之前验证用户输入并阻塞
在网站项目开发时,为了减少用户的错误性的操作,很多时候我们都需要做一些必要的JS验证来提醒用户,比如:“输入的值不符合规则,请重新输入”.“提交后无法修改,您确定要继续吗?”友好性的提示. 这时候我们 ...
- IO流实现模拟软件试用的功能
import java.io.*; public class TryOut { /** * IO流模拟软件试用次数的功能 * 这里注意try里BufferedOutputStream不要和InputS ...
- CentOS6下docker的安装和使用
CentOS6下docker的安装和使用 Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.利用Linux的LXC.AUFS.Go语言.cgroup ...
- [SCOI2009]粉刷匠
线性DP预处理+分组背包 首先设dp[i][j][0/1]表示该木板前i个格刷了j次且最后一次颜色为0/1的最大正确数 做下0/1的前缀和然后转移状态 dp[i][j][k]=max(dp[l][j] ...
- Drupal网站报错:PDOException: in lock_may_be_available()
Drupal网站报错: 原因: windows中mysql的服务停止了: 解决办法: 在服务中,启动mysql服务 启动后,刷新页面,问题完美解决
- Laravel基本使用
laravel一.简介二.运行环境要求 1.php 版本>=5.5.9 2.Mcrypt PHP扩展 php的加密扩展,提供多种加密算法 3.openssl扩展 对传输的数据进行加密 4.mbs ...
- 在linux中给你的应用做压力测试
在linux中给你的应用做压力测试 作者: 立地 邮箱: jarvin_g@126.com QQ: 511363759 一.webbench 1.在Ubuntu中安装webbench —支持get,h ...
- 仿拉手团购App8-- 更多模块
1.获得缓存大小和清除缓存 应用内数据的所有路径: /data/data/com.xxx.xxx/cache - 应用内缓存(注:对应方法getCacheDir()) /data/data/com.x ...
- C# Winform选项卡集成窗体
知识要点:利用反射动态的加载窗体到对应的TabPage的. using System; using System.Collections.Generic; using System.Component ...