原文链接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]狼抓兔子 最小割 对偶图 最短路的更多相关文章

  1. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  2. 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  3. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  4. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)

    浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...

  5. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  6. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  7. BZOJ1001[BeiJing2006]狼抓兔子——最小割

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  8. bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...

  9. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

随机推荐

  1. Docker入门 - 006 Docker 多种数据库的安装

    Docker 安装 MySQL 查找Docker Hub上的mysql镜像 root@VM_16_14_centos ~# docker search mysql INDEX NAME DESCRIP ...

  2. PHP字符串比较,看起来值完全一样,但是就是不相等的解决方案(&zwnj;)

    1 前言 字符串比较,看起来完全一样,然后用strcmp比较,永远不相等,用var_dump查看才知道,其中一个字符多了‌看不见的特殊符号,而我长度是3. 2 样例 当你选中它,显示出来的就是人眼所见 ...

  3. Js操作Array数组

    之前写过一篇文章,但是很模糊,不过却给我提供了一个思路,所以没有删除,这次写的是一个完善版本! 因为在很多的时候我们在选中了几行数据,然后存放在Array中,如下图: 看下控制台的数据 我双击了这两个 ...

  4. 大数据python词频统计之本地分发-file

    统计某几个词在文章出现的次数 -file参数分发,是从客户端分发到各个执行mapreduce端的机器上 1.找一篇文章The_Man_of_Property.txt如下: He was proud o ...

  5. 小程序---textarea踩坑

    1.小程序中textarea不能在scroll-view.swiper.picker-view等等里面运用. 2.不在fixed布局的页面中,placeholder也会随着页面滚动,解决方法:顶级父元 ...

  6. iOS 去除百度地图下方的 logo

    UIView *mView = _mapView.subviews.firstObject; for (id logoView in mView.subviews)  { if ([logoView  ...

  7. Confluence 6 外部小工具在其他应用中设置可信关系

    为了在你的 Confluence 中与其他应用建立外部小工具,我们建议你在 2 个应用之间设置 OAuth 或者信任的应用连接关系.在这个例子中,外部应用为小工具的服务器(服务器提供者)和 Confl ...

  8. vivado 下安装modelsim

    安装modelsim 下载链接:http://pan.baidu.com/s/1i4vHDbR 密码:dksy 1.运行modelsim-win64-10.4-se.exe,安装软件: 注意事项:安装 ...

  9. 【kafka】celery与kafka的联用问题

    背景:一个小应用,用celery下发任务,任务内容为kafka生产一些数据. 问题:使用confluent_kafka模块时,单独启用kafka可以正常生产消息,但是套上celery后,kafka就无 ...

  10. java String正则表达式

    1.正则表达式 字符串替换,     例子; String s="131hello334thrid  ".replaceAll("[a-zA-Z]"," ...