【BZOJ 1001】狼抓兔子 对偶图+SPFA
这道题是求图的最小割,也就是用最大流。但因为边太多,最大流算法会T,因此不能用最大流算法。
因为这是个平面图,所以求平面图的最小割可以使用特殊的技巧就是求对偶图然后求对偶图的最短路。把每个面看成一个点f*,f*之间边的权值就是之前原来的点f之间与f*的边交叉的边的权值。(说的不清楚,大家可以看其他博客,讲得都很好)
这样建了一个对偶图G*,由此可见,对偶图G*的一条路对应着原图G的一个割。所以求G*的最短路就相当于求G的最小割。
以后遇到平面图求最小割就把它转化成对偶图再求最短路,这样时间效率会大大提高。
| 88732 kb | 3572 ms | C++/Edit | 2195 B |
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int point[],next[],v[],c[];
int cnt=,s,t,n,m,dist[];
bool vis[];
queue<int>q;
void insect(int x,int y,int z)
{cnt++;next[cnt]=point[x];point[x]=cnt;v[cnt]=y;c[cnt]=z;}
void in1()
{
int i,j,num;
for (j=;j<m;++j)
{
scanf("%d",&num);
insect(j*,t,num);
insect(t,j*,num);
}
for (i=;i<n;++i)
for (j=;j<m;++j)
{
scanf("%d",&num);
insect((i-)*(m-)*+j*,(i-)*(m-)*+j*-m*+,num);
insect((i-)*(m-)*+j*-m*+,(i-)*(m-)*+j*,num);
}
for (j=;j<m;++j)
{
scanf("%d",&num);
insect(s,(n-)**(m-)+j*-,num);
insect((n-)**(m-)+j*-,s,num);
}
}
void in2()
{
int i,j,num,xx;
for (i=;i<n;++i)
{
scanf("%d",&num); xx=(i-)*(m-)*+;
insect(s,xx,num);
insect(xx,s,num);
for (j=;j<m;++j)
{
scanf("%d",&num); xx+=;
insect(xx-,xx,num);
insect(xx,xx-,num);
}
scanf("%d",&num);
insect(xx+,t,num);
insect(t,xx+,num);
}
}
void in3()
{
int i,j,num;
for (i=;i<n;++i)
for (j=;j<m;++j)
{
scanf("%d",&num);
insect((i-)*(m-)*+j*-,(i-)*(m-)*+j*,num);
insect((i-)*(m-)*+j*,(i-)*(m-)*+j*-,num);
}
}
void init()
{
scanf("%d %d\n",&n,&m);
s=; t=(n-)*(m-)*+;
in1();
in2();
in3();
}
void spfa()
{
int num,mp;
dist[s]=;
q.push(s);
while (!q.empty())
{
num=q.front(); q.pop(); vis[num]=;
mp=point[num];
while (mp>)
{
if (dist[v[mp]]>dist[num]+c[mp])
{
dist[v[mp]]=dist[num]+c[mp];
if (vis[v[mp]]==)
{
vis[v[mp]]=; q.push(v[mp]);
}
}
mp=next[mp];
}
}
printf("%d\n",dist[t]);
}
int main()
{
memset(dist,,sizeof(dist));
memset(point,,sizeof(point));
memset(next,,sizeof(next));
memset(vis,,sizeof(vis));
memset(v,,sizeof(v));
init();
spfa();
return ;
}


【BZOJ 1001】狼抓兔子 对偶图+SPFA的更多相关文章
- BZOJ 1001 狼抓兔子 (最小割转化成最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 27715 Solved: 7134[Submit][ ...
- BZOJ 1001 - 狼抓兔子 - [Dinic最大流][对偶图最短路]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 Description现在小朋友们最喜欢的"喜羊羊与灰太狼", ...
- bzoj 1001狼抓兔子(对偶图+最短路)最大流
推荐文章:<浅析最大最小定理在信息学竞赛中的应用>--周冬 题目 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...
- BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 算法讨论: 1.可以用最大流做,最大流等于最小割. 2.可以把这个图转化其对偶图,然 ...
- BZOJ 1001 狼抓兔子 平面图的最小割
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1001 题目大意: 见链接 思路: 求最小割,平面图的最小割等价于对偶图的最短路 直接建 ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- BZOJ 1001 狼抓兔子
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子 ...
- bzoj1001狼抓兔子 对偶图优化
bzoj1001狼抓兔子 对偶图优化 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路 菜鸡总是要填坑的! 很明显让你求网格图的最 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
随机推荐
- 使用reportNG替换testNG的默认报告
关于reportng的官网介绍:http://reportng.uncommons.org/ 1.下载reportNG的jar包:http://pan.baidu.com/s/1hq5znLU 2.r ...
- selenium如何操作cookies实现免登录
执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去. 思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件 ...
- tarjan算法求割点cojs 8
tarjan求割点:cojs 8. 备用交换机 ★★ 输入文件:gd.in 输出文件:gd.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] n个城市之间有通讯网 ...
- codeforces 709D D. Recover the String(构造)
题目链接: D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input s ...
- Finger Gestures 3.1
3.x自定义手势 Finger Gestures用起来非常爽,除了有常用的手势之外,3.x的版本还增加了自定义手势! 官方Document:http://fingergestures.fatalfro ...
- ftp虚拟账号登陆
配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理.废话不多说,这里记录下ftp虚拟账号登陆的部署过程及其中遇到的问题: ...
- js文本框提示和自动完成
1.模仿大型网站自动提示,就是输入“苹果”,在水果类中搜索,html代码如下: <div id="searchTips" style="display:none;w ...
- 基于Microsoft Azure、ASP.NET Core和Docker的博客系统
欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...
- 怎么写针对IE9的CSS
(自己亲自试过有用)针对IE9的CSS只需在相应CSS代码加入只有IE9识别的 \9\0.具体代码如下: .div{ background-color:#0f0\9\0;/* ie9 */ } 其他浏 ...
- C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)
既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞 ...