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]狼和羊的故事的更多相关文章

  1. BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )

    显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...

  2. BZOJ 1412: [ZJOI2009]狼和羊的故事【网络流】

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

  3. bzoj 1412 [ZJOI2009]狼和羊的故事(最小割)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1412 [题意] 在一个n*m的格子中,将羊和狼隔开的最小代价. [思路] 最小割. 由 ...

  4. BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流

    显然是个最小割嘛! 一开始我是这么建图的: 源点向狼连INF 羊向汇点连INF 每两个相邻格子间连双向边,边权为1 然后T成狗 后来我是这么建图的: 源点向狼连INF 羊向汇点连INF 狼和空地向相邻 ...

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

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

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

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4017  Solved: 2037[Submit][Status][Discuss] Descript ...

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

    空地之间开始没有连然后一直WA...题意混乱...尴尬. #include<cstdio> #include<cstring> #include<iostream> ...

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

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

  9. P2598 [ZJOI2009]狼和羊的故事(网络流)

    P2598 [ZJOI2009]狼和羊的故事 源点和所有狼连 $inf$ 的边 所有羊和汇点连 $inf$ 的边 所有点向四周连 $1$ 的边 这样所有狼和羊之间的边都被割掉了 统计最小割就好辣 #i ...

随机推荐

  1. VMware之无法切换桥接网络

    一.关闭正在运行的虚拟机 二.打开虚拟网络编辑器 三.还原默认设置 四.启动虚拟机即可正常使用桥接网络

  2. 第八届蓝桥杯C/C++ B组省赛----分巧克力

    分巧克力 问题描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧 ...

  3. np.newaxis()用法

    这个是liaspace函数 这个是np.newaxis的用法,增加维度,写一个表示增加一维,两个表示增加2维2位置的:号是对a的取值范围,如果把np.newaxis作为第一个参数是对行增加维度,作为第 ...

  4. easyui tree datagrid动态添加表头和表格数据,动态弹出框,修改和删除按钮

    1.要有获取表头的URL和表格的URL 背景:点击树的一个节点,就加载一个表格,这个表格是动态的,表头和表格数据都是动态的 解决方案:需要两个URL,一个是获取表头的URL,一个是获取表格数据的URL ...

  5. sc.exe

    sc.exe 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 服务管理程序:可用sc.exe远程创建 外文名 sc.exe 停止事件服务 sc  stop eventl ...

  6. ECMAScript5.1

    http://lzw.me/pages/ecmascript/  ECMAScript5.1中文版 https://msdn.microsoft.com/zh-cn/library/dn656907. ...

  7. MongoDB快速入门学习笔记4 MongoDB的文档查询操作

    先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, " ...

  8. 【JSOI2008】星球大战 并查集

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...

  9. 精通CSS高级Web标准解决方案(3-1 背景图像与图像替换)

    3.1背景图像基础 3.2图像替换 使用文本的图像并保留文本的方法.

  10. python 浮点数问题

    为什么 输入:0.2 + 0.1 得到的是:0.30000000000000004???? 0.1 * 3 = 0.30000000000000004????