显然答案就是最小割。直接跑dinic也能过,不过显得不太靠谱。

  考虑更正确的做法。作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边。于是我们把空白区域看成点,隔开他们的边看成边,原图的最小割就是这张新图中能割开原起点和终点的两个区域之间的最短路。

  建出来的新图就是原图的对偶图。平面图最小割=对偶图最短路。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 1010
#define S 2000000
#define T 2000001
int n,m,d[N*N<<],p[N*N<<],t=;
struct data{int to,nxt,len;
}edge[N*N*];
bool flag[N*N<<];
struct point
{
int x,d;
bool operator <(const point&a) const
{
return d>a.d;
}
};
priority_queue<point> q;
int trans(int x,int y,int p)
{
if (x==) return S;
if (x==n) return T;
if (y==) return T;
if (y==m) return S;
return ((x-)*(m-)+(y-)<<)+p;
}
void addedge(int x,int y,int z)
{
t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;
t++;edge[t].to=x,edge[t].nxt=p[y],edge[t].len=z,p[y]=t;
}
void dijkstra()
{
q.push((point){S,});
memset(d,,sizeof(d));d[S]=;
for (int i=;i<=trans(n,m,)+;i++)
{
while (!q.empty()&&flag[q.top().x]) q.pop();
if (q.empty()) break;
point k=q.top();q.pop();
flag[k.x]=;
for (int j=p[k.x];j;j=edge[j].nxt)
if (k.d+edge[j].len<d[edge[j].to])
{
d[edge[j].to]=k.d+edge[j].len;
q.push((point){edge[j].to,d[edge[j].to]});
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj1001.in","r",stdin);
freopen("bzoj1001.out","w",stdout);
const char LL[]="%I64d";
#else
const char LL[]="%lld";
#endif
n=read(),m=read();
for (int i=;i<=n;i++)
for (int j=;j<m;j++)
{
int x=read();
addedge(trans(i-,j,),trans(i,j,),x);
}
for (int i=;i<n;i++)
for (int j=;j<=m;j++)
{
int x=read();
addedge(trans(i,j-,),trans(i,j,),x);
}
for (int i=;i<n;i++)
for (int j=;j<m;j++)
{
int x=read();
addedge(trans(i,j,),trans(i,j,),x);
}
dijkstra();
cout<<d[T];
return ;
}

BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)的更多相关文章

  1. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  2. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  3. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

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

  4. BZOJ1001[BeiJing2006]狼抓兔子——最小割

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

  5. BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...

  6. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

  7. [BJOI2006]狼抓兔子——最小割转对偶图最短路

    其实这个题直接Dinic跑最小割可过. (小优化是: 无向图建网络流,一条边不用建成4条,可以正反容量都是边权即可.完全等价 ) [无效]网络流之转换对偶图 一个巧妙的事情是,如果建边合适的话,最小割 ...

  8. [bzoj1001][BJOI2006]狼抓兔子——最大流转最短路,平面图

    题目描述: 给定一个平面图,求最小割. 题解: 本题是一道经典题. 周冬Orz的论文是很好的研究资料. 这道题点太多,所以直接跑dinic无疑会超时. 我们观察原图,发现原图是一个平面图. 什么是平面 ...

  9. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)

    浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...

  10. BZOJ 1001 狼抓兔子 (最小割转化成最短路)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 27715  Solved: 7134[Submit][ ...

随机推荐

  1. easyui的datagrid的列checkbox自定义增加disabled选项

    需求根据权限判断datagrid的每一列的checkBox是否可选,看了下文档,发现editor的checkbox应该能实现这个功能,但我们项目自己将easyui外面包了一层,把原生的editor改成 ...

  2. php和js字符串的acsii码函数

    简单普及下编码知识: javascript中有charCodeAt(),根据字符查找ascii码. String.fromCharCode(),根据ascii码查找对应的字符. console.log ...

  3. BZOJ4985 评分 二分答案、DP

    传送门 题意:自己去看 答案满足单调性,所以考虑二分答案. 二分答案很好想,但是check并不是很好想. 考虑DP:设$f_i$表示队列中第$i$个人的分数$\geq \, mid$的代价,最开始$N ...

  4. Luogu4652 CEOI2017 One-Way Streets 树上差分

    传送门 题意:给出$N$个点.$M$条无向边的图,现在你需要给它定向,并满足$Q$个条件:每个条件形如$(x_i,y_i)$,表示定向之后需要存在路径从$x_i$走向$y_i$.问每条边是否都有唯一定 ...

  5. c# create html table test

    string html = "<html><head><title>44444444</title>"; html += @&quo ...

  6. WPF模拟探照灯文字

    原文:WPF模拟探照灯文字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1835936 ...

  7. HBase最佳实践-管好你的操作系统

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限本站分享,如需转载,请联系网易获取授权. 操作系统这个话题其实很早就想拿出来和大家分享,拖到现在一方面是因为对其中各种理论理解并不十分透彻,怕讲不好: ...

  8. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  9. 通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker image ...

  10. Session会话与Cookie简单说明

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...