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. hdu 2098 分拆素数和(素数)

    分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. java 三大框架 hibernate部分知识实现增删该查操作

    1.三层架构    表现层 web层(MVC是一个表现层的设计模型)    业务层 service层    持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...

  3. php三级联动(html,php两个页面)

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  4. Excel GET.DOCUMENT说明

    GET.DOCUMENT(type_num, name_text) Type_num    指明信息类型的数.下表列出 type_num 的可能值与对应结果. Type_num        返回 1 ...

  5. JavaScript基础知识(数据类型)

    数据类型 布尔:true/fasle console.log(typeof true);// "boolean" Number : true -->1 false --> ...

  6. 360自带--JS开发工具箱

    360自带–JS开发工具箱 360自带–JS开发工具箱 360自带–JS开发工具箱

  7. sale.order

    # 初始化一个变量用来记录产品类型line_type = ''# 循环明细行for product in self.options: # 拿到该明细行的产品类型 product_type = prod ...

  8. Django中CBV源码解析

    使用 关于FBV和CBV的使用在之前有提到,点击穿越. 准备 首先在视图中创建一个类并继承 django.views.View 类,在类中可定义各种请求方式对应执行的函数(函数名为请求方式名称小写). ...

  9. 271A

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  10. jsp一些使用技巧

    1.web.xml中配置error页面 一.<error-page> <error-code>500</error-code> <location>50 ...