[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][ ...
随机推荐
- jsp+jdbc实现用户登录
1.1 创建数据库表 表名:user 字段: userid 保存用户的登录id name 用户名 password 密码 1.2 实现思路 a. 用户登录,则需要有个一个表单页,此页面可输 ...
- Java校验8位字符串是否为正确的日期格式
import java.text.ParseException; import java.text.SimpleDateFormat; /** * 校验8位字符串是否为正确的日期格式 * @autho ...
- CF 949C Data Center Maintenance_强联通分量_思维题
题意: 某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份. 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务. 现在土豪公司想要将其中若干个数据中心的维护时 ...
- Unity5.X 创建基本的3D游戏场景
点New(新建懒得写了,反正不是智障应该都会) 创建好的项目会自带一个场景,场景会自带Main Camera (主摄像机),Directional Light (方向光) 系统自带几个可以创建的3 ...
- vue 动态拼接地址,使用本地的图片不显示
<el-col :span="4" v-for="(item, index) in listData" :key="index"> ...
- tinymce原装插件源码分析(七)-使能css、script
在tinymce中使用css个script tinymce的编辑器中css和script默认是不起作用的.(编辑器主要面向写文章使用,考虑到xss攻击,默认是不启用的) 需要修改tinymce.js中 ...
- laravel :Call to undefined function App\Http\Controllers\success() 解决方法
今天在调用方法时,报错如下:Call to undefined function App\Http\Controllers\success():方法已定义好了,所以我怀疑是未引入function.ph ...
- JavaScript 的对象继承方式,有几种写法?
JavaScript 的对象继承方式,有几种写法? 一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Pa ...
- tring.Format格式化用法
(数字保留两位小数,且每隔3为用逗号隔开): string.format("1f,.2d",333) -->333.00 string.format("1f,.2d ...
- ZOJ 3556
终于做出来了,激动.... 这道题隐藏得深啊,但若推导下来,就变简单了. 首先,一个集合的子集的个数为2^n=s.注意了,题目求的是有序集合组,并且每个集合是可以重复使用的,怎么办呢?这就要想到多重集 ...