Link:

BZOJ 1412 传送门

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=10005,MAXM=40005,INF=1<<27;
namespace Max_Flow
{int head[MAXN],S,T,level[MAXN],iter[MAXN],tot=-1;struct edge{int nxt,to,cap;}e[MAXM<<2];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=0;head[to]=tot;}    bool bfs(){memset(level,-1,sizeof(level));queue<int> q;q.push(S);level[S]=0;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=e[i].nxt)if(e[i].cap && level[e[i].to]==-1)level[e[i].to]=level[u]+1,q.push(e[i].to);}return (level[T]!=-1);}    int dfs(int v,int f){if(v==T) return f;int ret=0;for(int &i=iter[v];i!=-1;i=e[i].nxt){if(level[e[i].to]==level[v]+1 && e[i].cap){int d=dfs(e[i].to,min(f,e[i].cap));e[i].cap-=d;e[i^1].cap+=d;f-=d;ret+=d;if(!f) break;}}return ret;}    int Dinic(){int ret=0;while(bfs()){for(int i=0;i<MAXN;i++) iter[i]=head[i];ret+=dfs(S,INF);}return ret;}
}int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int n,m,dat[105][105];int main()
{using namespace Max_Flow;S=0;T=10001;memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&dat[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(dat[i][j]==1) add_edge(S,(i-1)*m+j,INF);if(dat[i][j]==2){add_edge((i-1)*m+j,T,INF);continue;}for(int k=0;k<4;k++){int fx=i+dx[k],fy=j+dy[k];if(fx<1||fx>n||fy<1||fy>m) continue;if(dat[i][j]!=1 || dat[fx][fy]!=1)add_edge((i-1)*m+j,(fx-1)*m+fy,1);}}printf("%d",Dinic());return 0;
}

转载于:https://www.cnblogs.com/newera/p/9238008.html

[BZOJ 1412] 狼与羊的故事相关推荐

  1. BZOJ 1412 狼和羊的故事

    首先,题目目的就是为了分割狼群和羊群,即建立超级源和超级汇求最小割从而转化成用网络流来处理. 如果没有空地,那么就是简单的二分图最大匹配,但是题中有空地的出现,所以需要在点与点之间建立双向边(不算后向 ...

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

    1412: [ZJOI2009]狼和羊的故事 >原题链接< Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......& ...

  3. [bzoj1934]: [ZJOI2009]狼和羊的故事

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

  4. bzoj1412[ZJOI2009]狼和羊的故事

    bzoj1412[ZJOI2009]狼和羊的故事 题意: n*m网格,每个格子可能为狼.羊或空格.现在要在一些格子边界篱笆使羊狼分开,求最短篱笆.n,m≤100 题解: 最小割问题,建一个超级源和超级 ...

  5. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  6. [ZJOI2009]狼和羊的故事 题解

    狼和羊的故事 怎么说呢,这道题其实不难,只是题意有那么亿点点难理解.我最开始想复杂了,理解为了栅栏长度是格点的周长,那事情就复杂了... 题目分析: 首先,要明确的是:一个狼领地和羊领地之间只需建长度 ...

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

    题目链接 P2598 [ZJOI2009]狼和羊的故事 要让羊和狼都区别开来,需要的最小的割是多少?每只羊向四周有4个可能的方向,每只狼也是同样的,所以每个动物向周围可以跑出4个流,我们要建立栅栏,可 ...

  8. BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】

    BZOJ1412 ZJOI2009 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...

  9. 【BZOJ1412】【ZJOI2009】狼和羊的故事(网络流)

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

最新文章

  1. NOI2003文本编辑器
  2. WPF 基础到企业应用系列1——开篇故意
  3. CSS Modules 用法教程
  4. RocketMQ安装内存不足的问题
  5. Hash 分布均衡算法
  6. SAP Spartacus里的@mixin visible-focus
  7. 了解这些坑,再也不会出现诡异的BUG了~
  8. java Web程序使用wro4j合并、压缩js、css等静态资源
  9. 1 在 Linux 下开机自动重启脚本(亲测)
  10. django03配置相关
  11. Android趣味课程:九宫格拼图游戏
  12. 这个在线抠图工具,好用又免费,告别Photoshop繁杂操作
  13. 按键精灵的5级开发认证,笔试题参考
  14. 元子弹老师-吉他指弹右手技巧
  15. com.mysql.jdbc.driver jar下载_com.mysql.jdbc.Driver
  16. 向量范数(Norms)之间关系的证明
  17. C++数论库:NTL
  18. 在微信小程序开发中遇见的bug及解决方案
  19. java ssh实现原理_SSH三大框架的工作原理及流程
  20. 学生登录系统 过程及结果

热门文章

  1. 显著性水平对应的临界值_统计学问题 常有的显著性水平a 所对应的Z值是哪些...
  2. 码蹄集 伐木工小码哥
  3. 打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。
  4. fidder抓包工具使用方法,完整流程
  5. C for Graphic:卡通光照
  6. rocksdb原理_RocksDB事务实现TransactionDB分析
  7. zoj - 3952
  8. 找不到微粒贷入口?带你了解更全面的微粒贷使用流程
  9. 这篇文章告诉你开发个人小程序要花多少钱
  10. flutter图片聊天泡泡_flutter/dart聊天实例|flutter仿微信