[BeiJing2006]狼抓兔子 dijkstra+平面图最小割
一眼裸的最大流求最小割,然而数据范围过大,跑不下来。
我们可以将平面图转成对偶图,并进行连边。
这样,每条边的长度就对应原图中的割边长度。
起点到终点的最短路即为最小割。
别用SPFA,会死的很惨
Code:
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#define U(i) ((i-1)<<1)|1
#define D(i) (i<<1)
using namespace std;
void SetIO(string a){
string in=a+".in",out=a+".out";
freopen(in.c_str(),"r",stdin);
freopen(out.c_str(),"w",stdout);
}
int s,t,n,m;
const int maxn=6000000+4;
int head[maxn],to[maxn],nex[maxn],val[maxn],edges,idx[1103][1103];
void add_edge(int u,int v,int c){
nex[++edges]=head[u], head[u]=edges, to[edges]=v, val[edges]=c;
} void build_row(int i,int j,int k){
if(i==1)add_edge(s,U(idx[i][j]),k);
else if(i==n) add_edge(D(idx[i-1][j]),t,k);
else add_edge(D(idx[i-1][j]),U(idx[i][j]),k),add_edge(U(idx[i][j]),D(idx[i-1][j]),k);
}
void build_col(int i,int j,int k){
if(j==1)add_edge(D(idx[i][j]),t,k);
else if(j==m) add_edge(s,U(idx[i][j-1]),k);
else add_edge(D(idx[i][j]),U(idx[i][j-1]),k),add_edge(U(idx[i][j-1]),D(idx[i][j]),k);
}
void build_cross(int i,int j,int k){
add_edge(U(idx[i][j]),D(idx[i][j]),k);
add_edge(D(idx[i][j]),U(idx[i][j]),k);
} long long d[maxn];
struct cmp{
bool operator()(int a,int b){
return d[a]>d[b];
}
};
priority_queue<long long ,vector<long long>,cmp>Q;
long long dijkstra()
{
bool done[maxn];
memset(done,false,sizeof(done));
memset(d,0x3f,sizeof(d));
d[s]=0;
Q.push(s);
while(!Q.empty())
{
int u=Q.top();
Q.pop();
if(done[u])continue;
done[u]=1;
if(u==t) break;
for(int v=head[u];v;v=nex[v])
if(d[u]+val[v]<d[to[v]])
{
d[to[v]]=d[u]+val[v];
Q.push(to[v]);
}
}
return d[t];
} int main(){
SetIO("input");
scanf("%d%d",&n,&m);
s=0,t=((n*m)<<1)+6666;
int cur=0,cost=0;
for(int i=1;i<n;++i)
for(int j=1;j<m;++j) idx[i][j]=++cur;
for(int i=1;i<=n;++i)
for(int j=1;j<m;++j){
scanf("%d",&cost);
build_row(i,j,cost);
} for(int i=1;i<n;++i)
for(int j=1;j<=m;++j){
scanf("%d",&cost);
build_col(i,j,cost);
} for(int i=1;i<n;++i)
for(int j=1;j<m;++j){
scanf("%d",&cost);
build_cross(i,j,cost);
}
printf("%lld",dijkstra());
return 0;
}
---恢复内容结束---
[BeiJing2006]狼抓兔子 dijkstra+平面图最小割的更多相关文章
- BZOJ1001 [BeiJing2006]狼抓兔子(平面图最小割转最短路)
..和HDU3870类似..注意n=1和m=1的情况. #include<cstdio> #include<cstring> #include<queue> #in ...
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
题意:有一张平面图,求它的最小割.N,M.表示网格的大小,N,M均小于等于1000. 左上角点为(1,1),右下角点为(N,M).有以下三种类型的道路 1:(x,y)<==>(x+1,y ...
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 算法讨论: 1.可以用最大流做,最大流等于最小割. 2.可以把这个图转化其对偶图,然 ...
- 【bzoi2006】【狼抓兔子】【最小割】
Description Source: Beijing2006 [BJOI2006] 八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id ...
- _bzoj1001 [BeiJing2006]狼抓兔子【平面图】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 顺便推荐一个ppt,里面有对平面图的介绍:浅析最大最小定理在信息学竞赛中的应用. 这里 ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
随机推荐
- HTML大纲
- Codeforces Round #284 (Div. 2) A
解题思路:给出 n个电影的精彩时段(a[i],b[i]),和每次可以跳过的时间x,问要看完所有的精彩时刻,至少需要看多长时间的电影. 因为要时间最少,所有除了精彩时刻的电影则能跳过就跳过(用取余来算) ...
- IDEA创建Maven工程依赖jar包爆红问题
使用IDEA创建maven工程后,在pom.xml文件中添加jar包坐标依赖后报错, 如图:
- zabbix部署监控端(server)以及页面优化
实验环境准备 172.20.10.2 server.zabbix.com 172.20.10.3 agent.zabbix.com 172.20.10.8 windows10 Server 端 [ro ...
- luoguP2742 【模板】二维凸包 / [USACO5.1]圈奶牛 二维凸包
我们知道,纵坐标最小的点一定在凸包上(如果有多个,那它们都会被取到) 随便找一个纵坐标最小的点,将其他所有点按照这个点为原点极角排序,我们发现极角大的会在极角小的后面加入(感性认知一下) 考虑新(加入 ...
- 使用json_decode无法解析json
在接入合作方接口时,遇到一个json无法解析出来代码如下: <?php $res='{"resultcode":007,"resMsg":"!& ...
- 【XSY2968】线性代数
题目来源:noi2018模拟测试赛(二十二) 毒瘤板题+提答场……真tm爽 提答求最大团,各路神仙退火神仙随机化八仙过海 题意: 题解: 支持双端插入的回文自动机板题 代码: #include< ...
- Jquery学习总结(2)——jQuery Ajax用法详解
[详解]jquery ajax在web应用开发中常用,主要包括有ajax,get,post,load,getscript等这几种常用无刷新操作方法,下面来给大家介绍一下.我们首先先从最简单的方法看起. ...
- LoadRunner监控Window/Unix系统资源的配置
LoadRunner监控Window/Unix系统资源需要做两件事情: 1.配置被监视的服务器,以便于LoadRunner能够获取系统资源使用情况的数据 2.在LoadRunner的Controlle ...
- 洛谷 P2393 yyy loves Maths II
P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...