1001: [BeiJing2006]狼抓兔子

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 18876  Solved: 4649
[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

Source

——————————————————分割线——————————————————

这道题是一道很玄学的题目,我们不能直接求它的最小割,要通过它的对偶图的最短路。那么怎么完成呢?

这时,只需求点1到点14的最短路就行啦。

[ATTENTION]:这道题点数总共有( N - 1 ) * ( M - 1) * 2 + 2 个,本蒟蒻被坑了好久。注意数组大小!!!

推荐一个课件:浅析最大最小定理在信息学竞赛中的应用

 /**************************************************************
Problem: 1001
User: shadowland
Language: C++
Result: Accepted
Time:2752 ms
Memory:165356 kb
****************************************************************/ #include "bits/stdc++.h" using namespace std ;
struct Edge { int to , next , val ; } ;
const int maxN = ; Edge e[ maxN ] ;
int head[ maxN ] , Dis[ maxN ] ;
bool vis[ maxN ] ; int N , M , cnt ; inline int INPUT ( ) {
int x = , f = ; char ch = getchar ( ) ;
while ( ch < '' || ch > '' ) { if ( ch == '-')f = - ; ch = getchar ( ) ;}
while ( ch >= '' && ch <= '' ) { x = ( x << ) + ( x << ) + ch - '' ; ch = getchar ( ) ;}
return x * f ;
} inline int Get ( const int x , const int y , const int z ) {
if ( x < || y >=M ) return ( N - ) * ( M - ) * + ;
if ( x >= N || y < ) return ;
return ( ( x - ) * ( M - ) + y ) * + z ;
} inline void Add_Edge ( const int x , const int y , const int _val ) {
e[ ++cnt ].to = y ;
e[ cnt ].val = _val ;
e[ cnt ].next = head[ x ] ;
head[ x ] = cnt ;
} void SPFA ( const int S ) {
memset ( vis , false , sizeof ( vis ) ) ;
memset ( Dis , 0x3f , sizeof ( Dis ) ) ;
queue < int > Q ;
Dis[ S ] = ;
vis[ S ] = true ;
Q.push ( S ) ;
while ( !Q.empty ( ) ) {
int t = Q.front( ) ; Q.pop ( ) ; vis[ t ] = false ;
for ( int i=head[ t ] ; i ; i = e[ i ].next ) {
int temp = e[ i ].to ;
if ( Dis[ temp ] > Dis[ t ] + e[ i ].val ) {
Dis[ temp ] = Dis[ t ] + e[ i ].val ;
if ( !vis[ temp ] ) {
Q.push ( temp ) ;
vis[ temp ] = true ;
}
}
}
}
} void DEBUG_ ( int N , int M ) {
printf ( "\n" ) ;
for ( int i= ; i<=(( N - ) * ( M - ) * + ) ; ++i ) {
printf ( "%d " , Dis[ i ] ) ;
}
}
int main ( ) {
int _val ;
scanf ( "%d %d" , &N , &M ) ;
for ( int i= ; i<=N ; ++i ) {
for ( int j= ; j<M ; ++j ) {
_val = INPUT ( ) ;
Add_Edge ( Get ( i , j , ) , Get ( i - , j , ) , _val ) ;
Add_Edge ( Get ( i - , j , ) , Get ( i , j , ) , _val ) ;
}
}
for ( int i= ; i<N ; ++i ) {
for ( int j= ; j<=M ; ++j ) {
_val = INPUT ( ) ;
Add_Edge ( Get ( i , j - , ) , Get ( i , j , ) , _val ) ;
Add_Edge ( Get ( i , j , ) , Get ( i , j - , ) , _val ) ;
}
}
for ( int i= ; i<N ; ++i ) {
for ( int j= ; j<M ; ++j ) {
_val = INPUT ( ) ;
Add_Edge ( Get ( i , j , ) , Get ( i , j , ) , _val ) ;
Add_Edge ( Get ( i , j , ) , Get ( i , j , ) , _val ) ;
}
}
SPFA ( ) ;
printf ( "%d\n" , Dis[ ( N - ) * ( M - ) * + ] ) ;
//DEBUG_( N , M ) ; return ;
}

2016-10-12 23:35:00

(完)

BZOJ 1001 题解的更多相关文章

  1. BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)

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

  2. s - t 平面图最大流 (附例题 bzoj 1001)

    以下均移自 周冬的<两极相通-浅析最大最小定理在信息学竞赛中的应用> 平面图性质 1.(欧拉公式)如果一个连通的平面图有n个点,m条边和f个面,那么f=m-n+2 2.每个平面图G都有一个 ...

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

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

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

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

  5. bzoj一句话题解

    发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...

  6. BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)

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

  7. 【24.58%】【BZOJ 1001】狼抓兔子

    Time Limit: 15 Sec Memory Limit: 162 MB Submit: 19227 Solved: 4726 [Submit][Status][Discuss] Descrip ...

  8. BZOJ 1001: [BeiJing2006]狼抓兔子

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

  9. BZOJ 3732 题解

    3732: Network Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ...

随机推荐

  1. 【JAVA线程间通信技术】

    之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了 ...

  2. python类中的super,原理如何?MRO是什么东东?

    下面这个URL解释得比较清楚. http://python.jobbole.com/86787/?utm_source=group.jobbole.com&utm_medium=related ...

  3. 攻城狮在路上(叁)Linux(二十)--- Linux磁盘格式化

    磁盘完成分区之后,进行格式化,生成文件系统. 命令格式: mkfs [-t 文件系统格式] 设备文件名  <== 使用 mkfs [Tab][Tab] 可以查看linux支持的文件系统格式 示例 ...

  4. 攻城狮在路上(叁)Linux(十一)--- 用户与用户组、文件权限、目录配置

    一.用户与用户组: 3个概念:文件所有者(user).用户组(group).其他人(others). /etc/passwd  <==存放所有的用户名 /etc/shadow  <==存放 ...

  5. 新浪微博的账号登录及api操作

    .sina.php <?php /** * PHP Library for weibo.com * * @author */ class sinaPHP { function __constru ...

  6. C# 与 Microsoft Expression Encoder实现屏幕录制

    在日常开发中,我们会经常遇到屏幕录制的需求.在C#中可以通过Expression Encoder的SDK实现这样的需求.首先需要下载Expression Encoder SDK,实现代码: priva ...

  7. Codeforces Round #143 (Div. 2) E. Cactus 无向图缩环+LCA

    E. Cactus   A connected undirected graph is called a vertex cactus, if each vertex of this graph bel ...

  8. YAML 技术研究

    YAML预研文档 YAML概要 YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:" ...

  9. 【SQL 数据库】将一张数据表信息复制到另一张数据表

    一.MySQL数据库 1.如果目标表存在 INSERT INTO 目标表  SELECT  * FROM 源表; 2.如果目标表不存在 CREATE TABLE 目标表 SELECT * FROM   ...

  10. Linux上部署JProbe

    1.在本机PC上安装JProbe: JProbeforWindowsEXEFormat_810