1412

思路:

  最小割;

  狼作为一个点集a,空领地作为点集b,羊作为点集c;

  s向a连边,c向t连边,a向b连边,b向b连边,b向c连边;

  如何理解最小割?

  a,c之间割掉最少的路径(栅栏)使其没有通路;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;#define maxn 20005
#define maxm 200005
#define INF 0x7ffffffconst int dx[5]={0,-1,0,1,0};
const int dy[5]={0,0,1,0,-1};int s,t,cnt=1,size,que[maxm],deep[maxn],n,m;
int head[maxn],E[maxm],V[maxm],F[maxm],map[105][105];inline void edge_add(int u,int v,int f)
{E[++cnt]=head[u],V[cnt]=v,F[cnt]=f,head[u]=cnt;E[++cnt]=head[v],V[cnt]=u,F[cnt]=0,head[v]=cnt;
}bool bfs()
{for(int i=s;i<=t;i++) deep[i]=-1;int h=0,tail=1;que[h]=s,deep[s]=0;while(h<tail){int now=que[h++];for(int i=head[now];i;i=E[i]){if(deep[V[i]]<0&&F[i]>0){deep[V[i]]=deep[now]+1;if(V[i]==t) return true;que[tail++]=V[i];}}}return false;
}int flowing(int now,int flow)
{if(now==t||flow<=0) return flow;int oldflow=0;for(int i=head[now];i;i=E[i]){if(deep[V[i]]==deep[now]+1&&F[i]>0){int pos=flowing(V[i],min(flow,F[i]));F[i]-=pos,F[i^1]+=pos;flow-=pos,oldflow+=pos;if(flow==0) return oldflow;}}if(oldflow==0) deep[now]=-1;return oldflow;
}int main()
{scanf("%d%d",&n,&m);size=n*m,t=size+1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) scanf("%d",&map[i][j]);}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(map[i][j]==1) edge_add(s,(i-1)*m+j,INF);if(map[i][j]==2) edge_add((i-1)*m+j,t,INF);for(int v=1;v<=4;v++){int xx=i+dx[v],yy=j+dy[v];if(xx>0&&xx<=n&&yy>0&&yy<=m){if(map[i][j]!=1||map[xx][yy]!=1) edge_add((i-1)*m+j,(xx-1)*m+yy,1);}}}}int ans=0;while(bfs()) ans+=flowing(s,INF);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6713329.html

AC日记——[ZJOI2009]狼和羊的故事 bzoj 1412相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,每个格子都有三种状态:狼.羊和空地,现在需要在相邻方格之间添加篱笆,问最少需要添加多少篱笆才能使得狼和羊分开 题目分析:最大流最小割,建图方 ...

  9. 【bzoj】 1412: [ZJOI2009]狼和羊的故事

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

最新文章

  1. 字符串相加/大数相加(代码极短)
  2. 信息系统项目管理师论文范文-干系人管理
  3. HBase在CentOS上分布集群安装
  4. 查找数组中任一峰值的下标
  5. 基于oracle设计与实现,基于Oracle的高校研究生招生系统设计与实现.doc
  6. vue使用 xterm_为什么我坚持使用xterm
  7. gridview 导成Excel
  8. 基于深度学习的目标检测(object detection)—— rcnn、fast-rcnn、faster-rcnn、SSD、YOLO
  9. mysan用的什么树mysql_Mysql储存引擎MyISAM和InnoDB中B+树索引的区别
  10. 数据结构-------图(最通俗易懂的文章)(一)图的数据结构及其遍历
  11. The StL Format(StL 格式)
  12. 3. Python脚本学习笔记三字符串
  13. 华纳云:香港服务器哪家比较好?
  14. HBase的数据模型和存储原理
  15. 8:操作模式1-boot mode
  16. NPOI_Excel中设置小数、百分比、货币、日期、科学计数法和金额大写
  17. step计算机语言,STEP7的三种基本编程语言LAD、FBD及STL 该如何抉择?
  18. 第13章 其他重要主题
  19. java极光推送实例
  20. SQLite数据库rowid

热门文章

  1. python socket epoll
  2. CentOS7设置中文字符集
  3. 漫画丨那些年,我们一起被毁过的“三观”…
  4. 从零起步的数据中心规划和建设
  5. vSAN其实很简单-vSAN 原厂支持的包含范围
  6. Maven学习总结(54)——使用 git-commit-id-plugin 插件来管理项目发版
  7. Java Web学习总结(44)—— RESTful 架构和 RESTful API 设计总结
  8. Linux学习总结(58)——生产环境运维故障处理指南
  9. PHP学习总结(8)——PHP入门篇之WAMPServer集成环境安装和配置
  10. Docker学习总结(14)——从代码到上线, 云端Docker化持续交付实践