BZOJ 1001 题解
1001: [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 18876 Solved: 4649
[Submit][Status][Discuss]
Description
Input
Output
输出一个整数,表示参与伏击的狼的最小数量.
Sample Input
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
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 题解的更多相关文章
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- s - t 平面图最大流 (附例题 bzoj 1001)
以下均移自 周冬的<两极相通-浅析最大最小定理在信息学竞赛中的应用> 平面图性质 1.(欧拉公式)如果一个连通的平面图有n个点,m条边和f个面,那么f=m-n+2 2.每个平面图G都有一个 ...
- BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 算法讨论: 1.可以用最大流做,最大流等于最小割. 2.可以把这个图转化其对偶图,然 ...
- BZOJ 1001 - 狼抓兔子 - [Dinic最大流][对偶图最短路]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 Description现在小朋友们最喜欢的"喜羊羊与灰太狼", ...
- bzoj一句话题解
发现好多人都在搞这个...本人也想来试试(Solved刚到70就搞这个靠不靠谱啊喂).会更新的.嗯. 1000-1029 1000 A+B problem (这个还需要一句话吗?). 1001 狼抓兔 ...
- BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 24727 Solved: 6276[Submit][ ...
- 【24.58%】【BZOJ 1001】狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB Submit: 19227 Solved: 4726 [Submit][Status][Discuss] Descrip ...
- BZOJ 1001: [BeiJing2006]狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ...
- BZOJ 3732 题解
3732: Network Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ...
随机推荐
- Java集合源码学习(一)集合框架概览
>>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...
- 【C#】Json数据 排版算法
我从服务器上取得一串Json数据,然后想表示到画面上.不过服务器上取下的Json数据肯定是经过压缩的,空格和换行都没有.如果直接看,可读性非常差. 由于我这个软件是内部管理用的,使用者既能直接看懂Js ...
- Pyqt 获取windows系统中已安装软件列表
开始之前的基础知识 1. 获取软件列表 在Python的标准库中,_winreg可以操作Windows的注册表.获取已经安装的软件列表一般是读去windows的注册表: SOFTWARE\Micros ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- SQL语法中的子查询Subqueries
记一下样子. 明白它的应用场景. SELECT account_id, product_cd, cust_id, avail_balance FROM account WHERE open_emp_i ...
- 【计算机图形学】openGL常用函数
OpenGL常用函数 glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被 SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测 ...
- DateTime时间格式
DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2.Text = dt.ToFile ...
- HTML Entity Sets - All
http://www.htmlentities.com/html/entities/ The view below displays the characters used in the offici ...
- hdu 1029 Ignatius ans the Princess IV
Ignatius and the Princess IV Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32767 K ( ...
- jQuery.lazyload详解
<SCRIPT src="jquery.js" type=text/javascript></SCRIPT> <SCRIPT src="jq ...