当前位置: 首页 > news >正文

BZOJ 1412 狼和羊的故事

首先,题目目的就是为了分割狼群和羊群,即建立超级源和超级汇求最小割从而转化成用网络流来处理。

如果没有空地,那么就是简单的二分图最大匹配,但是题中有空地的出现,所以需要在点与点之间建立双向边(不算后向弧),这样才能满足题意(我一开始挂到了这里)

理解透了还是很简单的

代码付上

  1 #include <cstdio>
  2 #include <algorithm>
  3 #include <cmath>
  4 #include <cstring>
  5 #include <queue>
  6 #include <iostream>
  7 using namespace std;
  8 #define N 105
  9 #define T 10005
 10 #define S 0
 11 int head[N*N],dep[N*N],cnt,n,m;
 12 struct node
 13 {
 14     int to,next,val;
 15 }e[N*N*N];
 16 inline void add(int x,int y,int z)
 17 {
 18     e[cnt].to=y;
 19     e[cnt].val=z;
 20     e[cnt].next=head[x];
 21     head[x]=cnt++;
 22     return ;
 23 }
 24 inline void insert(int x,int y,int z)
 25 {
 26     add(x,y,z);
 27     add(y,x,0);
 28     return ;
 29 }
 30 int bfs()
 31 {
 32     memset(dep,-1,sizeof(dep));
 33     queue <int >q;
 34     q.push(S);
 35     dep[S]=1;
 36     while(!q.empty())
 37     {
 38         int x=q.front();q.pop();
 39         for(int i=head[x];i!=-1;i=e[i].next)
 40         {
 41             int to1=e[i].to;
 42             if(dep[to1]==-1&&e[i].val)
 43             {
 44                 q.push(to1);
 45                 dep[to1]=dep[x]+1;
 46             }
 47         }
 48     }
 49     return dep[T]==-1?0:1;
 50 }
 51 int dfs(int x,int maxf)
 52 {
 53     if(!maxf)return 0;
 54     if(x==T)return maxf;
 55     int tflow=maxf,nowf;
 56     for(int i=head[x];i!=-1;i=e[i].next)
 57     {
 58         int to1=e[i].to;
 59         if(dep[to1]==dep[x]+1&&e[i].val&&dep[x]!=-1)
 60         {
 61             nowf=dfs(to1,min(e[i].val,tflow));
 62             if(!nowf)
 63             {
 64                 dep[to1]=-1;
 65                 continue;
 66             }
 67             tflow-=nowf;
 68             e[i].val-=nowf,e[i^1].val+=nowf;
 69             if(!tflow)break;
 70         }
 71     }
 72     dep[x]=-1;
 73     return maxf-tflow;
 74 }
 75 int map[N][N];
 76 int dx[4]={0,1,0,-1};
 77 int dy[4]={1,0,-1,0};
 78 int main()
 79 {
 80     memset(head,-1,sizeof(head));
 81     scanf("%d%d",&n,&m);
 82     for(int i=1;i<=n;i++)
 83     {
 84         for(int j=1;j<=m;j++)
 85         {
 86             int x;
 87             scanf("%d",&x);
 88             map[i][j]=x;
 89             if(x==2)insert((i-1)*m+j,T,1<<30);
 90             if(x==1)insert(S,(i-1)*m+j,1<<30);
 91         }
 92     }
 93     for(int i=1;i<=n;i++)
 94     {
 95         for(int j=1;j<=m;j++)
 96         {
 97             for(int k=0;k<4;k++)
 98             {
 99                 int ty=dx[k]+i,tx=dy[k]+j;
100                 if(ty==0||ty==n+1)continue;
101                 if(tx==0||tx==m+1)continue;
102                 int f=(i-1)*m+j,t=(ty-1)*m+tx;
103                 insert(f,t,1);
104             }
105         }
106     }
107     int ans=0;
108     while(bfs())
109     {
110         ans+=dfs(S,1<<30);
111     }
112     printf("%d\n",ans);
113     return 0;
114 }
View Code

 

转载于:https://www.cnblogs.com/Winniechen/p/8451265.html

相关文章:

  • LeetCode29.两数相除 JavaScript
  • vim命令模式下光标移动+查找
  • Fastjson的基本使用方法大全
  • 面孔相册按脸给照片分类 这是靠小米人脸检测技术实现的
  • 数据结构java版之冒泡排序及优化
  • 洛谷1474货币系统——小心重复的完全背包
  • 博弈论入门之斐波那契博弈
  • 工程优化暨babel升级小记
  • poj 3280【区间dp】
  • iOS 9以上系统 信任的企业级开发者证书
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • volatile
  • 自定义主题
  • python爬微信公众号前10篇历史文章(1)-思路概览
  • windows server 2008R2 域控迁移到 windows server 2012域控
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • REST架构的思考
  • Sublime Text 2/3 绑定Eclipse快捷键
  • WePY 在小程序性能调优上做出的探究
  • 程序员该如何有效的找工作?
  • 欢迎参加第二届中国游戏开发者大会
  • 技术:超级实用的电脑小技巧
  • 如何在GitHub上创建个人博客
  • 手写一个CommonJS打包工具(一)
  • 网络应用优化——时延与带宽
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 积累各种好的链接
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #宝哥教你#查看jquery绑定的事件函数
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (poj1.2.1)1970(筛选法模拟)
  • (办公)springboot配置aop处理请求.
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十一)手动添加用户和文件的特殊权限
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ***原理与防范
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 7 上传文件踩坑
  • .NET Core中的去虚
  • .NET Micro Framework初体验(二)
  • .net 反编译_.net反编译的相关问题
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • ?php echo ?,?php echo Hello world!;?
  • @在php中起什么作用?
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [Android 数据通信] android cmwap接入点
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息