[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听到这首歌,心想:狼 ...
随机推荐
- FluentAPI深入
1. HasMaxLenght 设定字段得最大长度: static void Main(string[] args) { using (TestDbContext ctx = new TestDbC ...
- HDU 3642 Get The Treasury ( 线段树 求长方体体积并 )
求覆盖三次及其以上的长方体体积并. 这题跟 http://wenku.baidu.com/view/d6f309eb81c758f5f61f6722.html 这里讲的长方体体积并并不一样. 因为本题 ...
- PHP面向对象练习2
思路:构造函数完成数据库连接,增删改一个方法,查询一条记录一个方法,查询多条一个方法,sql执行失败则返回提示,并交出sql语句方便查错 代码: <?class dbcontroll{ priv ...
- Codeforces Round #389 (Div. 2) 752F(树的权值重心)
题目大意 给定2k个队伍分别住在2k个城市里,需要设定若干个城市,然后选取2个队伍要在它们的最短路径上设一个城市作为休息站 要求设立最少的休息站,然后输出如何安排2个队伍 首先若干个其实就是在坑人,实 ...
- Access-Control-Allow-Origin设置多个域名
Access-Control-Allow-Origin只能返回一个. 所以用以下方法实现多个白名单域名:创建一个数据,获取请求中origin,如果在数组里,就返回该origin,如果不在,就返回一个默 ...
- Debian中文字体安装
默认装的英文办的debian7,看中国字不太美,这好办照着做吧 1. Setup locales #dpkg-reconfigure locales 选择 zh_CN GB2312 zh_CN.GBK ...
- 转:ListView中getView的工作原理
ListView中getView的工作原理: [1]ListView asks adapter “give me a view” (getView) for each item of the list ...
- JQuery实现多个菜单的显示隐藏
(如有错敬请指点,以下是我工作中遇到并且解决的问题) 效果图: 点击各个菜单显示/隐藏,以及点击灰色部分隐藏. 比如点击了第一个菜单,然后点击第二个菜单,第一个菜单会隐藏,再显示第二个菜单,不会叠加. ...
- cp2102通过GPIO连接树莓派
此博客不在更新,我的博客新地址:www.liuquanhao.com ----------------------------------------------------------------- ...
- 使用MyQR生成二维码
from MyQR import myqr # 主要用到以下几个参数 # words:文本,可以是一个链接,或者你想说的话 # picture:你用到的图片,作为背景,不然只是一个光秃秃的二维码 # ...