BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html
题目传送门 - BZOJ1001
题意

长成上面那样的网格图求最小割。
$n,m\leq 1000$
题解
网格图先转个对偶图,然后SPFA跑一发就完事了。
或者你可以这样理解。

你要从红色区域到蓝色区域连一条路径,比如橙色或者绿色。
(其中绿色就是答案)
然后话费就是经过的边权值和。
然后你会发现消耗一条边的权值所达到的效果是沟通那条边所分割的两个区域。于是发现,以空白区域为节点,原图的边为边,最短路就是答案。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=2000005,M=1005;
struct Gragh{
int cnt,y[N*3],z[N*3],nxt[N*3],fst[N];
void clear(){
cnt=0;
memset(fst,0,sizeof fst);
}
void add(int a,int b,int c){
y[++cnt]=b,z[cnt]=c,nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int n,m,nm,S,T;
void build(){
int x,a,b;
g.clear();
for (int i=1;i<=n;i++)
for (int j=1;j<m;j++){
scanf("%d",&x);
a=i==1?S:((i-2)*(m-1)+j);
b=i==n?T:((i-1)*(m-1)+j+nm);
g.add(a,b,x),g.add(b,a,x);
}
for (int i=1;i<n;i++)
for (int j=1;j<=m;j++){
scanf("%d",&x);
a=j==m?S:((i-1)*(m-1)+j);
b=j==1?T:((i-1)*(m-1)+j-1+nm);
g.add(a,b,x),g.add(b,a,x);
}
for (int i=1;i<n;i++)
for (int j=1;j<m;j++){
scanf("%d",&x);
a=(i-1)*(m-1)+j;
b=(i-1)*(m-1)+j+nm;
g.add(a,b,x),g.add(b,a,x);
}
}
int vis[N],d[N],q[N],head,tail;
int SPFA(int S,int T){
int n=T,qmod=n+1,x,y;
head=tail=0;
memset(d,63,sizeof d);
memset(vis,0,sizeof vis);
d[S]=0,vis[S]=1,q[++tail]=S;
while (head!=tail){
vis[x=q[head=(head+1)%qmod]]=0;
for (int i=g.fst[x];i;i=g.nxt[i]){
y=g.y[i];
if (d[y]>d[x]+g.z[i]){
d[y]=d[x]+g.z[i];
if (!vis[y])
vis[q[tail=(tail+1)%qmod]=y]=1;
}
}
}
return d[T];
}
int main(){
scanf("%d%d",&n,&m),nm=(n-1)*(m-1);
S=2*nm+1,T=S+1;
build();
printf("%d",SPFA(S,T));
return 0;
}
BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路的更多相关文章
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)
浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001[BeiJing2006]狼抓兔子——最小割
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...
- bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)
平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...
随机推荐
- most asked interview questions for C/C++
1. compared to prefix ++, postfix increment needs one more step to create a temporary variable? w ...
- 响应式页面-@media介绍
01 响应式页面-@media介绍, 我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话 ...
- Arrays.asList()vs Collections.singletonList()
Collections.singletonList(something)是不可变的, 对Collections.singletonList(something)返回的列表所做的任何更改将导致Unsup ...
- 【进阶3-3期】深度广度解析 call 和 apply 原理、使用场景及实现(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/22 call() 和 apply() call() 方法调用一个 ...
- vuecli3初尝试(转载)
https://segmentfault.com/a/1190000016423943 在vue-cli3中安装element-ui 其中两种方式自己选择 格式化代码 使用yarn lint命令自动格 ...
- Redis扩展
Redis扩展下载地址:https://windows.php.net/downloads/pecl/releases/redis/ PHP怎么安装redis扩展 http://www.php.cn/ ...
- cf1051d 简单的状态压缩dp
/* 给定一个二行n列的格子,在里面填黑白色,要求通过黑白色将格子分为k块 请问有多少种填色方式 dp[j][k][0,1,2,3] 填到第j列,有k块,第j列的颜色, */ #include< ...
- Spring Boot如何使用Runner实现启动时调用?用法和原理都在这里
在日常的项目开发中经常会遇到这样的需求:项目启动的时候进行一些一次性的初始化工作,如读取加载资源文件.或者执行其它外部程序. 这个时候我们就可以用到spring-boot为我们提供的一种扩展机制--R ...
- Linux之man命令详解及中文汉化
使用方法 Linux man中的man就是manual的缩写,用来查看系统中自带的各种参考手册 使用方法: man command 示例: [root@VM_0_13_centos ~]# man l ...
- easyui合并多个单元格
$('#table-v2').datagrid({ url: './data/am/data1_table.json', pagination: true, //显示分页 fit: true, //d ...