既然这题这么水,我就不写了……

挖掘栅栏的本质:只能建在相邻两个,且建好后使得狼和羊之间不存在通路。而割的定义是:使S集和T集不存在通路。而题目又要求建的栅栏最少,于是就是最小割问题了。

从源点向所有狼连一条∞的边,从所有羊向汇点连一条∞的边,这样就能保证狼和羊都在不同的点集里。然后再从狼到相邻的羊和空地,空地到相邻的空地和羊连一条流量为1的边,最大流求最小割即可。

或者将所有点向四周连边。。就是时间长了点 --hzwer

代码:(来自hzwer)

 #include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x7fffffff
#define T 10001
using namespace std;
int head[],q[],h[];
int cnt=,ans,n,m;
int xx[]={,,,-},yy[]={,-,,},mp[][];
struct data{int to,next,v;}e[];
void ins(int u,int v,int w)
{e[++cnt].to=v;e[cnt].next=head[u];e[cnt].v=w;head[u]=cnt;}
void insert(int u,int v,int w)
{ins(u,v,w);ins(v,u,);}
bool bfs()
{
int t=,w=,i,now;
memset(h,-,sizeof(h));
q[]=;h[]=;
while(t<w)
{
now=q[t];t++;i=head[now];
while(i)
{
if(e[i].v&&h[e[i].to]==-)
{
h[e[i].to]=h[now]+;
q[w++]=e[i].to;
}
i=e[i].next;
}
}
return h[T]==-? :;
}
int dfs(int x,int f)
{
if(x==T)return f;
int w,used=,i;
i=head[x];
while(i)
{
if(e[i].v&&h[e[i].to]==h[x]+)
{
w=f-used;
w=dfs(e[i].to,min(w,e[i].v));
e[i].v-=w;
e[i^].v+=w;
used+=w;
if(used==f)return f;
}
i=e[i].next;
}
if(!used)h[x]=-;
return used;
}
void dinic(){while(bfs())ans+=dfs(,inf);}
void ini()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp[i][j]);
}
void build()
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(mp[i][j]==)insert(,(i-)*m+j,inf);
else if(mp[i][j]==)insert((i-)*m+j,T,inf);
for(int k=;k<;k++)
{
int nowx=i+xx[k],nowy=j+yy[k];
if(nowx<||nowx>n||nowy<||nowy>m||mp[i][j]==)continue;
if(mp[i][j]!=||mp[nowx][nowy]!=)
insert((i-)*m+j,(nowx-)*m+nowy,);
}
}
}
int main()
{
ini();
build();
dinic();
printf("%d",ans);
return ;
}

最新文章

  1. asp.net core 依赖注入问题
  2. linux 安装rz sz命令
  3. ubuntu wifi连接不上或经常断网,重启就好
  4. CodeForces 716B Complete the Word
  5. Maven的依赖范围
  6. JQuery 的几个有用的技巧
  7. find-right-interval
  8. 第二百三十一天 how can I 坚持
  9. Apriori算法实例----Weka,R, Using Weka in my javacode
  10. android上下文
  11. 130831组队赛-Regionals 2011, Asia - Kuala Lumpur
  12. Maven--403权限问题解决方式(求解决)
  13. Python 3中字符串可以被改变吗?
  14. python标准库大全(转)
  15. js实现全选/全不选、反选
  16. Jquery插件开发之图片放大镜效果(仿淘宝)
  17. 无法跨越程序集边界使用程序集“DataCheck, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中的类型“List&lt;ILayer&gt;”,因为该类型有一个为嵌入互操作类型的泛型类型参数
  18. HDU 4607 Park Visit (树的最长链)
  19. Powershell cannot be loaded because running scripts is disabled on this system 解决办法
  20. Jquery把获取到的input值转换成json

热门文章

  1. 我的第一个canvas的作品:漫画对白编辑器
  2. 字符设备驱动中cdev与inode、file_operations的关系
  3. python安装与环境变量配置
  4. SIM900A访问HTTP的简单方法
  5. NEV_SDK开发环境部署手册
  6. (转)汇编bne的问题
  7. failed to lazily initialize a collection of role
  8. python 读写 Excel文件
  9. 关于sqlmap无法打开的问题解决办法
  10. jquery 对 Json 的各种遍历