bzoj1001狼抓兔子 对偶图优化

链接

https://www.lydsy.com/JudgeOnline/problem.php?id=1001

思路

菜鸡总是要填坑的!

很明显让你求网格图的最小割

不过1000*1000明显不能跑dinic(虽然可以水过)

我们可以用对偶图来优化辣。

对偶图是啥?可以用最短路来求最小割的东西,论文写的特清楚。

代码

#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2e6+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m,S,T;
struct edge {
int v,nxt,q;
}e[N*5];
int head[N*5],tot;
void add(int u,int v,int q) {
// cout<<u<<" "<<v<<" "<<q<<"\n";
e[++tot].v=v;
e[tot].q=q;
e[tot].nxt=head[u];
head[u]=tot;
}
struct node {
int x,y;
bool operator < (const node &b) const {
return x>b.x;
}
};
priority_queue<node> q;
int dis[N];
void dij() {
memset(dis,0x3f,sizeof(dis));
q.push((node){0,S});
dis[S]=0;
while(!q.empty()) {
node u=q.top();
q.pop();
if(u.x!=dis[u.y]) continue;
// cout<<head[S]<<" "<<<<"\n";
for(int i=head[u.y];i;i=e[i].nxt) {
int v=e[i].v;
// cout<<u.y<<" -> "<<v<<" "<<e[i].q<<"\n";
if(dis[v]>dis[u.y]+e[i].q) {
dis[v]=dis[u.y]+e[i].q;
q.push((node){dis[v],v});
}
}
}
}
int main() {
// freopen("a.in","r",stdin);
n=read(),m=read();
S=n*m*2+1,T=n*m*2+2;
// cout<<S<<" "<<T<<"\n";
for(int i=1,TX,TY,x;i<=n;++i) {
for(int j=1;j<m;++j) {
x=read();
TX=(i-1)*(m-1)*2+j,TY=TX-(m-1);
if(i==1) TY=S;
if(i==n) TX=T;
add(TX,TY,x);
add(TY,TX,x);
}
}
for(int i=1,TX,TY,x;i<n;++i) {
for(int j=1;j<=m;++j) {
x=read();
TX=(i-1)*(m-1)*2+j+(m-1),TY=TX-(m-1)-1;
if(j==1) TY=T;
if(j==m) TX=S;
add(TX,TY,x);
add(TY,TX,x);
}
}
for(int i=1,TX,TY,x;i<n;++i) {
for(int j=1;j<m;++j) {
x=read();
TX=(i-1)*(m-1)*2+j,TY=TX+(m-1);
add(TX,TY,x);
add(TY,TX,x);
}
}
dij();
printf("%d\n",dis[T]);
return 0;
}

bzoj1001狼抓兔子 对偶图优化的更多相关文章

  1. 【BZOJ1001】[BeiJing2006]狼抓兔子 对偶图最短路

    [BZOJ1001][BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子 ...

  2. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  3. bzoj1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...

  4. BZOJ1001:狼抓兔子(最小割最大流+vector模板)

    1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...

  5. BZOJ1001 狼抓兔子 平面图转对偶图 最小割

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

  6. BZOJ1001 狼抓兔子(裸网络流)

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

  7. 【建图+最短路】Bzoj1001 狼抓兔子

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

  8. BZOJ1001 狼抓兔子(网络流转最短路:对偶图)

    题意: 给一个如图形式的\(n*m\)的方格,从左上走到右下,给出边权,问分成两块所需的最小代价.\(n,m\leq1000\). 思路: 显然是个最小割,但是\(O(n^2m)\)的复杂度很高,虽然 ...

  9. 最大流最小割——bzoj1001狼抓兔子,洛谷P2598

    前置知识 平面图 平面图就是平面上任意边都不相交的图.(自己瞎画的不算XD) 对偶图 比如说这个图,我们发现平面图肯定会把平面分成不同的区域(感觉像拓扑图),并把这些区域当做每个点(不被包围的区域独自 ...

随机推荐

  1. luke下载使用

    网上内容太多,下载了却不管用,即使下载了,也不知道怎么用.(对我这种小白来说,大神就一笑而过吧) 下载地址:http://www.xdowns.com/app/253909.html(如若下载不到可以 ...

  2. swust oj 1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2251 / 4487 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100 的整形.在提示中已 ...

  3. Oracle课程档案,第八天

    存储管理 查询块的大小:show parameter db_block_size database:数据库 tablespace:表空间 datafile:数据文件 segments:段 extent ...

  4. smartFloat

    $.fn.smartFloat = function() {     var position = function(element) {         var top = element.posi ...

  5. JavaScript基础知识(DOM)

    获取元素的方法 要操作谁,就要先获取谁: 获取元素 1.document.getElementById:通过ID名来获取元素 兼容性: 在IE8以下,会默认把name属性当做id来获取: docume ...

  6. 20165311 ch02 课下作业

    补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的

  7. MVCC&PURGE&分布式事务

    Ⅰ.MVCC介绍 consistent non-locking read,通过行多版本控制的方式读取当前执行时间点的记录 默认情况下innodb select没有任何锁,读到的记录在更新就通过undo ...

  8. 1.认识Wireshark的主窗口界面(转)

    原文地址:https://www.ichunqiu.com/vm/51411/1 (1)首先了解一下这款软件主窗口界面中每个部分的功能.Wireshark主窗口界面如下图所示: 上图中每部分的含义如下 ...

  9. 浅谈Java中的关键字

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  10. Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,

    本人使用orcale11g 安装orcale 之类以及navicat配置在这里不提,之后会写一篇文章来说明. 到此已经安装和配置navicat访问数据正常,但是运行Asp.net  程序报错 问题如下 ...