【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啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
随机推荐
- UVALive 6255 Kingdoms --状态搜索
题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的 ...
- java 16 - 9 增强for的概述和使用
JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举 增强for:是for循环的一种. 格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可 ...
- 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)
要实现的效果:
- RDLC直接打印帮助类
代码 /// <summary> /// 打印帮助类 /// </summary> public class PrintHelper { private int m_curre ...
- 自己实现一个高大尚的Android客户端
毕业差不多一年了,一直做得都是很底层的东西,由于面向的客户群不同,主要实现在于功能,效率,没有很炫的界面,客户也并不在意界面有多炫.看到各大市场各种高大尚的app,简直亮瞎了我的眼啊,下决心自己实现一 ...
- MySQL系列:查看并修改当前数据库的编码
MySQL中,数据库的编码是一个相当重要的问题,有时候我们需要查看一下当前数据库的编码,甚至需要修改一下数据库编码. 查看当前数据库编码的SQL语句为: mysql> use xxx ...
- [CareerCup] 10.3 Integer not Contain in the File 文件中不包含的数
10.3 Given an input file with four billion non-negative integers, provide an algorithm to generate a ...
- 信息安全系统设计基础实验一 20135211&20135216
北京电子科技学院(BESTI) 实 验 报 告 封面 课程:信息安全系统设计基础 班级:1352 姓名:(按贡献大小排名)李行之 刘蔚然 ...
- C#基础之垃圾回收
1.托管资源的回收 我们都知道C#托管资源的回收由GC全权负责控制,可是什么时候GC会回收垃圾呢?一般出现以下情况会回收垃圾:手动调用GC.Collect()强制回收:第0代对象内存已满:应用程序域被 ...
- Common Lisp编译程序的小技巧
这几天开始玩Common Lisp,遇上了一个有意思的问题,CL一般是解释运行,也有实现可以编译生成字节码(fas文件).我正在用的两种CL实现是SBCL和CLISP,前者是我从<实用Commo ...