BZOJ1001[BeiJing2006]狼抓兔子——最小割
题目描述
输入
输出
输出一个整数,表示参与伏击的狼的最小数量.
题意就是割开一部分边试起点和终点不连通且割开边的边权最小,显然是最小割(转成最大流做)。但要注意的是,这里的边是双向边,所以回流边可以直接把流量赋成正向边边权,这样就不用建双向边了(就是不用建正向v流量边,反向0流量边再建反向v流量边,正向0流量边;直接建正向v流量边和反向v流量边)。这样的好处是一开始回流边就可以增广。
最后附上代码。
- #include<cstdio>
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cmath>
- #include<queue>
- using namespace std;
- int next[6000001];
- int to[6000001];
- int val[6000001];
- int head[6000001];
- int tot=1;
- int q[6000001];
- int n,m;
- int S,T;
- int x;
- int ans;
- int d[6000001];
- const int INF=0x3f3f3f3f;
- void add(int x,int y,int v)
- {
- tot++;
- next[tot]=head[x];
- head[x]=tot;
- to[tot]=y;
- val[tot]=v;
- tot++;
- next[tot]=head[y];
- head[y]=tot;
- to[tot]=x;
- val[tot]=v;
- }
- bool bfs(int S,int T)
- {
- int r=0;
- int l=0;
- memset(d,-1,sizeof(d));
- q[r++]=S;
- d[S]=0;
- while(l<r)
- {
- int now=q[l];
- for(int i=head[now];i;i=next[i])
- {
- if(d[to[i]]==-1&&val[i]!=0)
- {
- d[to[i]]=d[now]+1;
- q[r++]=to[i];
- }
- }
- l++;
- }
- if(d[T]==-1)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- int dfs(int x,int flow)
- {
- if(x==T)
- {
- return flow;
- }
- int now_flow;
- int used=0;
- for(int i=head[x];i;i=next[i])
- {
- if(d[to[i]]==d[x]+1&&val[i]!=0)
- {
- now_flow=dfs(to[i],min(flow-used,val[i]));
- val[i]-=now_flow;
- val[i^1]+=now_flow;
- used+=now_flow;
- if(now_flow==flow)
- {
- return flow;
- }
- }
- }
- if(used==0)
- {
- d[x]=-1;
- }
- return used;
- }
- void dinic()
- {
- while(bfs(S,T)==true)
- {
- ans+=dfs(S,0x3f3f3f);
- }
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- S=1;
- T=n*m;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m-1;j++)
- {
- scanf("%d",&x);
- add((i-1)*m+j,(i-1)*m+j+1,x);
- }
- }
- for(int i=1;i<=n-1;i++)
- {
- for(int j=1;j<=m;j++)
- {
- scanf("%d",&x);
- add((i-1)*m+j,i*m+j,x);
- }
- }
- for(int i=1;i<=n-1;i++)
- {
- for(int j=1;j<=m-1;j++)
- {
- scanf("%d",&x);
- add((i-1)*m+j,i*m+j+1,x);
- }
- }
- dinic();
- printf("%d",ans);
- return 0;
- }
BZOJ1001[BeiJing2006]狼抓兔子——最小割的更多相关文章
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...
- BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)
浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...
- 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)
平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...
随机推荐
- vba 弹框
'第三个按钮,上传数据到数据库 Private Sub CommandButton1_Click() str1 = "abcde" str2 = InputBox("请输 ...
- 【数据库摘要】10_Sql_Create_Index
CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下.索引使数据库应用程序能够更快地查找数据. 索引 您能够在表中创建索引,以便更加高速高效地查询 ...
- Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...
- Cordova套网站
用Cordova套网站,只修改Content的话,打包后的App,在点击后会打开浏览器,并没有在App中显示内容. 需要设置allow-navigation为 * <?xml version=' ...
- Bootstrap Modal 使用remote从远程加载内容
Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是: (1) ...
- Redis对象占用内存分析
当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...
- 搭建SpringBoot+dubbo+zookeeper+maven框架(二)
上一篇文章是关于搭建SpringBoot+dubbo+zookeeper+maven框架的,但是里面的功能还不够完善,今天就日志管理方面做一些改善. 下了demo的网友可能会发现项目在启动时会有警告: ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- JVM规范系列第3章:为Java虚拟机编译
Oracle 的 JDK 包括两部分内容:一部分是将 Java 源代码编译成 Java 虚拟机的指令集的编译器,另一部分是用于Java 虚拟机的运行时环境. 第一部分应该说的是 Javac 这个前置编 ...
- 重磅|0元学 Python运维开发,别再错过了
51reboot 运维开发又双叒叕的搞活动了,鉴于之前 51reboot 的活动反馈,每次活动结束后(或者已经结束了很长时间)还有人在问活动的事情.这一次小编先声明一下真的不想在此次活动结束后再听到类 ...