[BZOJ 1412] 狼与羊的故事
Link:
Solution:
非常明显的最小割模型:
将所有点分成两个互不相邻的点集,且要求代价最小
建图:
$<S,sheep,INF>$
$<wolf,T,INF>$
$<sheep,wolf/ground,1>$、$<ground,wolf/sheep/ground,1>$
Code:
#include <bits/stdc++.h> using namespace std;
const int MAXN=,MAXM=,INF=<<;
namespace Max_Flow
{
int head[MAXN],S,T,level[MAXN],iter[MAXN],tot=-;
struct edge{int nxt,to,cap;}e[MAXM<<]; void add_edge(int from,int to,int cap)
{
e[++tot].nxt=head[from];e[tot].to=to;e[tot].cap=cap;head[from]=tot;
e[++tot].nxt=head[to];e[tot].to=from;e[tot].cap=;head[to]=tot;
}
bool bfs()
{
memset(level,-,sizeof(level));
queue<int> q;q.push(S);level[S]=;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i!=-;i=e[i].nxt)
if(e[i].cap && level[e[i].to]==-)
level[e[i].to]=level[u]+,q.push(e[i].to);
}
return (level[T]!=-);
}
int dfs(int v,int f)
{
if(v==T) return f;
int ret=;
for(int &i=iter[v];i!=-;i=e[i].nxt)
{
if(level[e[i].to]==level[v]+ && e[i].cap)
{
int d=dfs(e[i].to,min(f,e[i].cap));
e[i].cap-=d;e[i^].cap+=d;
f-=d;ret+=d;if(!f) break;
}
}
return ret;
}
int Dinic()
{
int ret=;
while(bfs())
{
for(int i=;i<MAXN;i++) iter[i]=head[i];
ret+=dfs(S,INF);
}
return ret;
}
} int dx[]={,-,,},dy[]={,,,-};
int n,m,dat[][]; int main()
{
using namespace Max_Flow;
S=;T=;memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&dat[i][j]); for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(dat[i][j]==) add_edge(S,(i-)*m+j,INF);
if(dat[i][j]==){add_edge((i-)*m+j,T,INF);continue;}
for(int k=;k<;k++)
{
int fx=i+dx[k],fy=j+dy[k];
if(fx<||fx>n||fy<||fy>m) continue;
if(dat[i][j]!= || dat[fx][fy]!=)
add_edge((i-)*m+j,(fx-)*m+fy,);
}
}
printf("%d",Dinic());
return ;
}
[BZOJ 1412] 狼与羊的故事的更多相关文章
- BZOJ 1412 狼和羊的故事
首先,题目目的就是为了分割狼群和羊群,即建立超级源和超级汇求最小割从而转化成用网络流来处理. 如果没有空地,那么就是简单的二分图最大匹配,但是题中有空地的出现,所以需要在点与点之间建立双向边(不算后向 ...
- [BZOJ 1412][ZJOI 2009] 狼和羊的故事
题目大意 有一个 (n times m) 的网格,每一个格子上是羊.狼.空地中的一种,羊和狼可以走上空地.现要在格子边上建立围栏,求把狼羊分离的最少围栏数. (1 leqslant n, ; m le ...
- BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
- 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][ ...
- 【BZOJ1412】狼和羊的故事(网络流)
[BZOJ1412]狼和羊的故事(网络流) 题面 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...
- P2598 [ZJOI2009]狼和羊的故事(网络流)
P2598 [ZJOI2009]狼和羊的故事 源点和所有狼连 $inf$ 的边 所有羊和汇点连 $inf$ 的边 所有点向四周连 $1$ 的边 这样所有狼和羊之间的边都被割掉了 统计最小割就好辣 #i ...
- 洛谷 P2598 [ZJOI2009]狼和羊的故事 解题报告
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" \(Orez\)听到这首歌, ...
- 题解 P2598 【[ZJOI2009]狼和羊的故事】
P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...
随机推荐
- Python 3基础教程6-for循环语句
本文介绍另外一种循环语句,for循环,直接看例子. 用for实现打印1到9的数字. 方法一:写入一个列表,然后遍历列表 # 这里介绍 for循环# 打印1到9 exampleList = [1,2,3 ...
- tinymce 上传图片空间(转)
转载自:http://www.cnblogs.com/ilovewindy/p/3823069.html 创建plugin后, editor_plugin.js中使用了 imageUploadWind ...
- 软工实践 - 第十一次作业 Alpha 冲刺 (3/10)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/9972061.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去 ...
- 201621123034 《Java程序设计》第9周学习总结
作业09-集合与泛型 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答:Map的HashMap中使用嵌套类static class Node<K,V& ...
- hdu1576逆元的一道水题
hdu 1576 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). ...
- zkCli.sh客户端其他命令简介
quit 退出 connect host:port 连接到其他ZooKeeper服务器 close 关闭连接 history 操作指令历史 redo 重复执行某个指令, 使用格式为 redo id, ...
- [CF949C]Data Center Maintenance
题目大意:$n$个点,每个点有一个值$w_i$.$m$个条件,每个条件给出$x,y$,要求$w_x\not =w_y$.选择最少的点,使其值加$1$后,所有条件成立(数据保证有解). 题解:对于每个条 ...
- vue的main.js
import Vue from 'vue'; import App from './App.vue'; //================http 请求======================= ...
- spring in action 学习笔记二:aop的理解
一: aop的思想的来在哪里? 一个系统一般情况下由多个组件组成,而每一个组件除了干自己的本职工作以外,有时还会干一些杂活(如:日志(logging).事务管理(transaction manager ...
- vue2.0 v-tap简洁(漏)版 (只解决300ms问题)
Vue.directive('tap',{ bind:function(el,binding){ var startTx, startTy, endTx, endTy, startTime, endT ...