bzoj 1412: [ZJOI2009]狼和羊的故事
http://www.lydsy.com/JudgeOnline/problem.php?id=1412
超级源点连向所有的狼,超级汇点连向所有羊,流量为INF
相邻连边流量为1,最小割
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
std::queue<int>que;
int fs[]={,,,-,};
#define INF 0x7fffffff
const int maxn = ;
int map[][];
inline int read() {
int x=;
char c=getchar();
while(c<''||c>'')c=getchar();
while(c<=''&&c>='')x=x*+c-'',c=getchar();
return x;
}
int n,m,S,T,src,decc;
struct node{
int v,next,flow;
}edge[maxn];int head[maxn],num=,cur[maxn],lev[maxn];
void add_edge(int u,int v,int w) {
edge[++num].v=v;edge[num].next=head[u];head[u]=num;
edge[num].flow=w;
}
bool bfs() {
while(!que.empty()) que.pop();
std::memset(lev,-,sizeof lev);
memcpy(cur,head,sizeof head);
lev[src]=;
que.push(src);int now;
while(!que.empty()) {
now=que.front();que.pop();
for(int i=head[now];i;i=edge[i].next) {
int v=edge[i].v;
if(lev[v]==-&&edge[i].flow>) {
lev[v]=lev[now]+;
if(v==decc)return true;
que.push(v);
}
}
}
return false;
}
int dfs(int now,int flow) {
if(now==decc)return flow;
int rest=,delta;
for(int &i=cur[now];i;i=edge[i].next) {
int v=edge[i].v;
if(lev[v]==lev[now]+&&edge[i].flow>) {
delta=dfs(v,std::min(flow-rest,edge[i].flow));
if(delta) {
edge[i].flow-=delta;
edge[i^].flow+=delta;
rest+=delta;if(rest==flow)break;
}
}
}
if(rest==flow)lev[now]=-;//满流
return rest;
}
int Dinic() {
int ans=;
while(bfs())
ans+=dfs(src,INF);
return ans;
}
inline void add(int a,int b,int flow) {
add_edge(a,b,flow);add_edge(b,a,);
}
inline int calc(int i,int j) {
return (i-)*m+j;
}
int main() {
n=read(),m=read();
src=;decc=n*m+;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
map[i][j]=read();
for(int i=;i<=n;++i) {
for(int j=;j<=m;++j) {
if(map[i][j]==)add(src,calc(i,j),INF);
else if(map[i][j]==){ add(calc(i,j),decc,INF);continue;}
for(int k=;k<;++k) {
int x=i+fs[k],y=j+fs[k+];
if(x<=||x>n||y<=||y>m)continue;
add(calc(i,j),calc(x,y),);
}
}
}
printf("%d\n",Dinic());
return ;
}
bzoj 1412: [ZJOI2009]狼和羊的故事的更多相关文章
- BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
- BZOJ 1412: [ZJOI2009]狼和羊的故事【网络流】
Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! O ...
- bzoj 1412 [ZJOI2009]狼和羊的故事(最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1412 [题意] 在一个n*m的格子中,将羊和狼隔开的最小代价. [思路] 最小割. 由 ...
- BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流
显然是个最小割嘛! 一开始我是这么建图的: 源点向狼连INF 羊向汇点连INF 每两个相邻格子间连双向边,边权为1 然后T成狗 后来我是这么建图的: 源点向狼连INF 羊向汇点连INF 狼和空地向相邻 ...
- 1412. [ZJOI2009]狼和羊的故事【最小割】
Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! O ...
- 1412: [ZJOI2009]狼和羊的故事
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4017 Solved: 2037[Submit][Status][Discuss] Descript ...
- bzoj1412: [ZJOI2009]狼和羊的故事
空地之间开始没有连然后一直WA...题意混乱...尴尬. #include<cstdio> #include<cstring> #include<iostream> ...
- BZOJ1412 [ZJOI2009]狼和羊的故事 【最小割】
1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3454 Solved: 1733 [Submit][ ...
- P2598 [ZJOI2009]狼和羊的故事(网络流)
P2598 [ZJOI2009]狼和羊的故事 源点和所有狼连 $inf$ 的边 所有羊和汇点连 $inf$ 的边 所有点向四周连 $1$ 的边 这样所有狼和羊之间的边都被割掉了 统计最小割就好辣 #i ...
随机推荐
- opencv使用日记之一:平台搭建Mat类以及图像的读取修改
平台搭建就摸了一整天时间,真的是...不说了,最后我选择的是 opencv3.0(2015/06/04) + win7 + vs2012 注意opencv的版本不同导入的库文件是不一样的,所以请 ...
- KNN算法python实现小样例
K近邻算法概述优点:精度高.对异常数据不敏感.无数据输入假定缺点:计算复杂度高.空间复杂度高适用数据范围:数值型和标称型工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签 ...
- IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决
(此文为复制帖,原文地址为:http://blog.sina.com.cn/s/blog_a8192bdd0101af40.html) self.navigationController.naviga ...
- 69、Android 布局中轻松实现图片的全屏、居中、平铺
public void paint() { if (item.laying_mode != 1)//平铺或者充满 { new AsyncTask<Void, Void, Void>() { ...
- 微信小程序--问题汇总及详解之tab切换
设置背景颜色就直接在page里设置 page {background-color: rgb(242, 242, 242);} tab切换: navigator 页面链接 传参的格式为url=&q ...
- nyoj 题目12 喷水装置(二)
喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...
- THUWC 2018(游记)
这次是在雅礼洋湖中学举行的,一所2017年才创办的学校,新的学校, 貌似有些危险,积雪过多屋顶上的冰块砸下来,很容易砸到人, 听说最近就有一个人被砸死了. Day1 昨天睡的比较迟,12点吧,今天早上 ...
- vim 编辑器的使用
相信一个linux运维人员不可能不知道vim ,下面我们一起来学习vim的日常操作吧.(不要追求多,工作中用到了再去学也不迟.) 1.vim 的几种模式 *正常模式:快捷键or命令行操作 *插入模式: ...
- Java EE 学习(2):使用 IDEA 开发 最简java web
参考:http://www.cnblogs.com/carsonzhu/p/5468223.html 使用IntelliJ IDEA开发java web 前言:由于本人以前简略的学习过 java 语言 ...
- node系列
http://www.cnblogs.com/zhongweiv/p/nodejs.html