Time Limit: 15 Sec Memory Limit: 162 MB

Submit: 19227 Solved: 4726

[Submit][Status][Discuss]

Description

现在小朋友们最喜欢的”喜羊羊与灰太狼”,话说灰太狼抓羊不到,但抓兔子还是比较在行的,

而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:

左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路

1:(x,y)<==>(x+1,y)

2:(x,y)<==>(x,y+1)

3:(x,y)<==>(x+1,y+1)

道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,

开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(N,M)的窝中去,狼王开始伏击

这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,

才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的

狼的数量要最小。因为狼还要去找喜羊羊麻烦.

Input

第一行为N,M.表示网格的大小,N,M均小于等于1000.

接下来分三部分

第一部分共N行,每行M-1个数,表示横向道路的权值.

第二部分共N-1行,每行M个数,表示纵向道路的权值.

第三部分共N-1行,每行M-1个数,表示斜向道路的权值.

输入文件保证不超过10M

Output

输出一个整数,表示参与伏击的狼的最小数量.

Sample Input

3 4

5 6 4

4 3 1

7 5 3

5 6 7 8

8 7 6 5

5 5 5

6 6 6

Sample Output

14

HINT

2015.4.16新加数据一组,可能会卡掉从前可以过的程序。

【题目链接】:http://www.lydsy.com/JudgeOnline/problem.php?id=1001

【题解】



把整个图的对偶子图搞出来;

就是把所有线组成的面看成新的节点;

原来的线相邻的两个面之间连接一条边;边权就是原来的线的边权(容量);

如果原来的线没有相邻的面;就在那个面所代表的点连一条自环.

起点到终点的任意一条路径都是原图的一个割。

显然。咱们从起点到终点求一下最短路就是最小割了;

建对偶图可以按照下面的方法建;

其实就是从左到右,从上到下的顺序编号(每个大格);

然后编号乘个2,奇数就是上小格,偶数就是下小格。

盗张图



了解更多详见

http://wenku.baidu.com/link?url=87F10nBWauMdSF-PaKHoG-3fZj0jFE63P6pHSeX6ZiguQqXOQxm41iLWW5IdZCp2MWFQ8JghamfeI68PtLqEv_JSWapGp5z415gNoYb031u



【完整代码】

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <cstring> using namespace std; const int MAXN = 2000000;
const int INF = 0x3f3f3f3f; int n,m,s,t;
vector <int> a[MAXN];
vector <int> w[MAXN];
bool inque[MAXN];
queue <int> dl;
int dis[MAXN]; void add(int x,int y,int z)
{
a[x].push_back(y);
w[x].push_back(z);
a[y].push_back(x);
w[y].push_back(z);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d",&n,&m);
if (n==1 || m==1)
{
int mi = INF;
for (int i = 1;i <= max(n,m)-1;i++)
{
int x;
scanf("%d",&x);
mi = min(mi,x);
}
printf("%d\n",mi);
return 0;
}
s = 0;
t = 2*(n-1)*(m-1)+1;
for (int j = 1;j <= m-1;j++)
{
int cost;
scanf("%d",&cost);
int s1 = 2*j-1;
add(s,s1,cost);
}
for (int i = 1;i <= n-2;i++)
{
for (int j = 1;j <= m-1;j++)
{
int cost;
scanf("%d",&cost);
int s1 = 2*((i-1)*(m-1)+j);
int s2 = 2*(i*(m-1)+j)-1;
add(s1,s2,cost);
}
}
for (int j = 1;j <= m-1;j++)
{
int cost;
scanf("%d",&cost);
int s1 = 2*((n-2)*(m-1)+j);
add(s1,t,cost);
}
//横边处理完毕.... for (int i = 1;i <= n-1;i++)
{
for (int j = 1;j <= m;j++)
{
int cost;
cin >> cost;
if (j==1)
{
int s1 = 2*((i-1)*(m-1)+1);
add(s1,t,cost);
}
else
if (j==m)
{
int s1 = 2*i*(m-1)-1;
add(s,s1,cost);
}
else
{
int s1 = 2*((i-1)*(m-1)+j);
int s2 = 2*((i-1)*(m-1)+j-1)-1;
add(s1,s2,cost);
}
}
}
//竖边处理完毕.... for (int i = 1;i <= n-1;i ++)
{
for (int j = 1;j <= m-1;j++)
{
int cost;
scanf("%d",&cost);
int s1 = 2*((i-1)*(m-1)+j);
int s2 = 2*((i-1)*(m-1)+j)-1;
add(s1,s2,cost);
}
}
//斜边处理完毕... memset(dis,INF,sizeof(dis));
dis[s] = 0;
inque[s] = true;
dl.push(s);
while (!dl.empty())
{
int x = dl.front();
inque[x] = false;
dl.pop();
int len = a[x].size();
for (int i = 0;i <= len-1;i++)
{
int y = a[x][i];
int co = w[x][i];
if (dis[y] > dis[x]+co)
{
dis[y] = dis[x] + co;
if (!inque[y])
{
dl.push(y);
inque[y] = true;
}
}
}
}
printf("%d\n",dis[t]);
return 0;
}


【24.58%】【BZOJ 1001】狼抓兔子的更多相关文章

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

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

  2. BZOJ 1001 - 狼抓兔子 - [Dinic最大流][对偶图最短路]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 Description现在小朋友们最喜欢的"喜羊羊与灰太狼", ...

  3. bzoj 1001狼抓兔子(对偶图+最短路)最大流

    推荐文章:<浅析最大最小定理在信息学竞赛中的应用>--周冬 题目 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...

  4. BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 算法讨论: 1.可以用最大流做,最大流等于最小割. 2.可以把这个图转化其对偶图,然 ...

  5. BZOJ 1001 狼抓兔子 平面图的最小割

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1001 题目大意: 见链接 思路: 求最小割,平面图的最小割等价于对偶图的最短路 直接建 ...

  6. bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...

  7. BZOJ 1001 狼抓兔子

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子 ...

  8. 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)

    YEAH 题目链接 终于做对这道题啦    建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...

  9. BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 29035  Solved: 7604 Descript ...

  10. 【bzoj题解】1001 狼抓兔子

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

随机推荐

  1. Costura.Fody

    使用Costura.Fody将源DLL合并到目标EXE 本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EX ...

  2. GO语言学习(二)Windows 平台下 LiteIDE 的安装和使用

    1. 安装 Go 语言并设置环境变量 参考GO语言学习(一) 2. MinGW 的下载和安装 Windows 下的 Go 调试还需要安装 MinGW. 2.1 下载安装工具的安装 最新版本下载安装工具 ...

  3. 【AtCoder Beginner Contest 074 C】Sugar Water

    [链接]h在这里写链接 [题意] 让你在杯子里加糖或加水. (4种操作类型) 糖或水之间有一定关系. 糖和水的总量也有限制. 问你糖水浓度的最大时,糖和糖水的量. [题解] 写个dfs就好. 每次有4 ...

  4. nginx启用https访问

    什么是https? https 全称:Hyper Text Transfer Protocol over Secure Socket Layer,是http的安全版.即http下加入SSL协议层,因此 ...

  5. 【Codeforces Round #435 (Div. 2) C】Mahmoud and Ehab and the xor

    [链接]h在这里写链接 [题意] 让你组成一个n个数的集合,使得这n个数的异或和为x; x<=1e5 每个数最大1e6; [题解] 1e5<=2^17<=2^18<=1e6的 ...

  6. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈

    摘要:     本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈.   一.俘获分组 1.1 准 ...

  8. FreeMarker分页组件监听器

    分页组件监听器 /*  * project名:    * 包     名: com.companyName.dhm.iepgm.common.taglib  * 文 件名: PaginatedList ...

  9. ios 获取button所在的cell对象, 注意:ios7 =&lt; System Version &lt; ios8 获取cell对象的差别

    ios7 =< System Version< ios8 : ios7 =< System Version < ios8  下 button.superview.supervi ...

  10. Kinect 骨骼映射---Let me dance for U!

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/45583443 作者:ca ...