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. 51Nod——N1118 机器人走方格

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 基准时间限制:1 秒 空间限制:131072 KB 分值: 0  ...

  2. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  3. CC2530定时器使用

     定时器学习   文件夹 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4 Timer在协议栈的代码位置为hal_timer ...

  4. Activex调试以及m_hWnd为空 解决办法

    1. 点击[开始]->[运行] 命令:regedit.2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet ...

  5. js 省市二级联动

    <html> <head> <meta charset="UTF-8"> <title></title> </he ...

  6. 阿里云OSS工具类

    [前言] 我们上家公司的存储系统用的是FastDFS(智能一代云平台(二十八):对前后端分离和FastDFS的使用的再理解):现在在职的公司用的是阿里云的OSS(OSS的官方文档),在工作的时候整理一 ...

  7. position:relative和position:absolute的差别及使用方法

    这几天在做项目时遇到做选项卡的功能时,标题和内容区域的背景颜色不同.且须要选到当前标题时,此标题以下会出现下边框及小三角边框,这样就会超出标题背景颜色需覆盖以下内容区域.这时就须要用到potition ...

  8. iOS开发Quzrtz2D:十一:图片截屏以及图片擦除

    一:图片截屏:截取的是控制器的view #import "ViewController.h" @interface ViewController () @end @implemen ...

  9. 一起学Python:tcp服务器

    tcp服务器 生活中的电话机 如果想让别人能更够打通咱们的电话获取相应服务的话,需要做以下几件事情: 买个手机 插上手机卡 设计手机为正常接听状态(即能够响铃) 静静的等着别人拨打 tcp服务器 如同 ...

  10. Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫

    1. 安装与测试 进入 cmd(以管理员权限),使用 pip 工具,pip install requests 进行安装: 基本用法: >> import requests >> ...