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. java第一次上机实验--验证码

    package javashiyan; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event. ...

  2. 15、js 原生基础总结

    Day1 一.什么是JS?   ==基于对象==和==事件驱动==的客户端脚本语言 二.哪一年?哪个公司?谁?第一个名字是什么? 1995,NetScape(网景公司),布兰登(Brendan Eic ...

  3. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  4. Linux上配置http上网代理

    有些局域网环境上网需要使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是Linux纯命令行的界面就需要手动配置了. 如果要全局用户使用应用于所有的Shell,就需要修改 /etc/pr ...

  5. 使用LibreOffice修复受损的Office文档

    在工作中时常遇到Office文档损坏,用MS Office不能打开,有时候用LibreOffice(测试为4.2版本)可以打开,另存一下就好了. 此方法虽然不是100%管用,但在实际中大半都可以. 另 ...

  6. VLAN之间通信-三层交换

    实验目的 VLAN之间通信-三层交换 掌握配置VLANIF接口的方法 理解数据包跨VLAN路由的原理 掌握测试多层交换网络连通性的方法 实验原理 三层交换机在原有二层交换机的基础之上增加了路由功能,同 ...

  7. Qt带返回值的信号发射方式(使用QMetaObject::invokeMethod)

    一般来说,我们发出信号使用emit这个关键字来操作,但是会发现,emit并不算一个调用,所以它没有返回值.那么如果我们发出这个信号想获取一个返回值怎么办呢? 两个办法:1.通过出参形式返回,引用或者指 ...

  8. 洛谷P4092 [HEOI2016/TJOI2016]树 并查集/树链剖分+线段树

    正解:并查集/树链剖分+线段树 解题报告: 传送门 感觉并查集的那个方法挺妙的,,,刚好又要复习下树剖了,所以就写个题解好了QwQ 首先说下并查集的方法趴QwQ 首先离线,读入所有操作,然后dfs遍历 ...

  9. keras实现textcnn

    https://github.com/MoyanZitto/keras-cn/blob/master/docs/legacy/blog/word_embedding.md 这个链接将带有embedin ...

  10. js的字符串代码库及讲解

    1.字符串操作 1.1去除字符串空格 元字符 : \s:空格或者空白等 ^ : 限定开始位置 => 本身不占位置 $ : 限定结束位置 => 本身不占位置 | : 或者 () : 分组代表 ...