Description

“狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆。可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已。所以Orez决定在羊狼圈中再加入一些篱笆,还是要将羊狼分开来养。 通过仔细观察,Orez发现狼和羊都有属于自己领地,若狼和羊们不能呆在自己的领地,那它们就会变得非常暴躁,不利于他们的成长。 Orez想要添加篱笆的尽可能的短。当然这个篱笆首先得保证不能改变狼羊的所属领地,再就是篱笆必须修筑完整,也就是说必须修建在单位格子的边界上并且不能只修建一部分。

Input

文件的第一行包含两个整数n和m。接下来n行每行m个整数,1表示该格子属于狼的领地,2表示属于羊的领地,0表示该格子不是任何一只动物的领地。

Output

文件中仅包含一个整数ans,代表篱笆的最短长度。

Sample Input

2 2
2 2
1 1

Sample Output

2

数据范围
10%的数据 n,m≤3
30%的数据 n,m≤20
100%的数据 n,m≤100

 
又是网络流,有没建出模型来……
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<iostream>
  5. using namespace std;
  6. const int inf=,N=;
  7. int fx[]={,,,-},fy[]={,-,,};
  8. struct ee{int to,next,f;}e[];
  9. int head[N*N],q[N**N],dis[N*N],a[N][N];
  10. int S,T,n,m,cnt=,ans,w;
  11.  
  12. void ins(int u,int v,int f){
  13. e[++cnt].to=v;e[cnt].f=f;e[cnt].next=head[u];head[u]=cnt;
  14. e[++cnt].to=u;e[cnt].f=;e[cnt].next=head[v];head[v]=cnt;
  15. }
  16.  
  17. bool bfs(){
  18. for (int i=;i<=T;i++) dis[i]=inf;
  19. int h=,t=,now;
  20. q[]=S;dis[S]=;
  21. while(h!=t){
  22. now=q[++h];
  23. for (int i=head[now];i;i=e[i].next){
  24. int v=e[i].to;
  25. if (e[i].f&&dis[now]+<dis[v]){
  26. dis[v]=dis[now]+;
  27. if (v==T)return ;
  28. q[++t]=v;
  29. }
  30. }
  31. }
  32. if (dis[T]==inf) return ; return ;
  33. }
  34.  
  35. int dinic(int now,int f){
  36. if (now==T) return f;
  37. int rest=f;
  38. for (int i=head[now];i;i=e[i].next){
  39. int v=e[i].to;
  40. if (e[i].f&&dis[v]==dis[now]+&&rest){
  41. int t=dinic(v,min(rest,e[i].f));
  42. if (!t) dis[v]=;
  43. e[i].f-=t;
  44. e[i^].f+=t;
  45. rest-=t;
  46. //if(t) printf("%d %d %d\n",now,v,e[i].f);
  47. }
  48. }
  49. return f-rest;
  50. }
  51. int main(){
  52. scanf("%d%d",&n,&m);
  53. S=,T=n*m+;
  54. for(int i=;i<=n;i++)
  55. for(int j=;j<=m;j++)
  56. scanf("%d",&a[i][j]);
  57. for(int i=;i<=n;i++) for(int j=;j<=m;j++)
  58. if(a[i][j]==) ins(S,(i-)*m+j,inf);
  59. for(int i=;i<=n;i++) for(int j=;j<=m;j++)
  60. if(a[i][j]==) ins((i-)*m+j,T,inf);
  61. for(int i=;i<=n;i++) for(int j=;j<=m;j++){
  62. if(a[i][j]==) {
  63. for(int ii=;ii<;ii++) {
  64. int nx=i+fx[ii],ny=j+fy[ii];
  65. if(nx>n||nx<||ny>m||ny<||a[nx][ny]==) continue;
  66. ins((i-)*m+j,(nx-)*m+ny,);
  67. }
  68. }
  69. else if(a[i][j]==){
  70. for(int ii=;ii<;ii++) {
  71. int nx=i+fx[ii],ny=j+fy[ii];
  72. if(nx>n||nx<||ny>m||ny<||a[nx][ny]==) continue;
  73. ins((i-)*m+j,(nx-)*m+ny,);
  74. }
  75. }
  76. }
  77. while(bfs())
  78. ans+=dinic(S,inf);
  79. printf("%d",ans);
  80. }

【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]狼和羊的故事

    http://www.lydsy.com/JudgeOnline/problem.php?id=1412 超级源点连向所有的狼,超级汇点连向所有羊,流量为INF 相邻连边流量为1,最小割 #inclu ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Url几个常用的函数

    parse_url() 本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分. 本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分.不完整的 URL ...

  2. saltstack实战4--综合练习3

    Saltstack配置管理-业务引用haproxy 在业务模块里写它的配置 各个业务是不同的,这里有差异性,所以没写在配置模块里. 对minion02也执行安装haproxy [root@master ...

  3. ENVI/IDL与ArcGIS集成开发的三种途径

    转载:本文来自ENVI5.0-IDL8.2系列产品白皮书_201303.PDF(Esri中国官网可下载)中P7-P10 ENVI 是一个非常开放的平台,提供一个健全的函数库,几乎涵盖ENVI 平台大部 ...

  4. 今天用css做了一个QQ登录页面

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Sublime Text—安装

    一.简介 市面上的编辑器纷繁复杂各有优点,好用的编辑器能让你工作事半功倍,先简单介绍下本文主角Sublime Text编辑器,下面简称Sublime. 1.可用于 Windows.Mac OS X 和 ...

  6. SQL<>0查询不到NUll的值

    这几天遇到这样一个问题,sql中写<>0,刚好某个记录是NULL,道理上是满足<>0的啊,可是就是抽不出来,关于这个问题,到处找了点资料,算是这里 写一个总结出来. 用java ...

  7. ASP.NET网站前端页面的复制

    网络普及的时代,遇到问题的首要解决方案并不是问人,而是找度娘.当我们找一些技术性的问题时,会发现很多解决方案在博客里,看看博主发表的博客总是惊叹不已,想要自己也有这么一个好习惯,把学到的东西以自己的方 ...

  8. 第四十二篇、自定义Log打印

    1.在Xcode 8出来之后,需要我们去关闭多余的日志信息打印 2.在开发的过程中,打印调试日志是一项比不可少的工程,但是在iOS 10中NSLog打印日志被屏蔽了,就不得不使用自定义Log 3.去掉 ...

  9. PHP标签的格式

    PHP标签的格式: 1.xml格式(推荐的,标准的标记) <?php    php代码?> 示例: 2.短格式 <? php代码 ?> 此种格式需要在php.ini中配置 示例 ...

  10. Zookeeper-集群环境搭建

    一般为单数台机器,操作系统为linux. zookeeper为java编写,所以必须有java的运行环境. 下载地址:http://mirrors.hust.edu.cn/apache/zookeep ...