P4001 [BJOI2006]狼抓兔子
传送门
思路:
不少题解都是用网络流来做最小割(网络流是什么),但对于一个不会网络流的蒟蒻来做这题相当困难。
听机房daolao说可以重构图做最短路。然后就baidu将平面图转换成一个对偶图,因为网络流的最小割 = 对偶图的最短路,所以只要在对偶图上跑最短路(从左上角跑到右下角)就行了。
由于堆优化的Dijkstra写炸了,冒着“死亡”的风险码了个Spfa的最短路,开了O2竟然卡进800ms。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<deque>
#include<set>
using namespace std;
#define maxn 2000005
#define INF 0x3f3f3f3f
int cnt,n,m,w;
int head[maxn],vis[maxn],dis[maxn];
queue <int> q;
struct hh
{
int to,nex,dis;
}t[maxn<<];
inline int read()
{
char kr=;
char ls;
for(;ls>''||ls<'';kr=ls,ls=getchar());
int xs=;
for(;ls>=''&&ls<='';ls=getchar())
{
xs=(xs<<)+(xs<<)+ls-;
}
if(kr=='-') xs=-xs;
return xs;
}
inline void clear()//初始化
{
cnt=;
memset(vis,false,sizeof(vis));
memset(dis,INF,sizeof(dis));
memset(head,-,sizeof(head));
}
inline void add(int nex,int to,int dis)//前向星建图
{
t[cnt]=hh{to,head[nex],dis};
head[nex]=cnt++;
t[cnt]=hh{nex,head[to],dis};
head[to]=cnt++;
}
inline void getmap()//将平面图转换为对偶图
{
for(int j=;j<m;++j)//给每块标号
{
w=read();
add(,j*,w);
}
for(int i=;i<n;++i)
{
for(int j=;j<m;++j)
{
w=read();
add(*(i-)*(m-)+j*-,*(i-)*(m-)+j*,w);
}
}
if(n>=)
for(int j=;j<m;++j)
{
w=read();
add(*(n-)*(m-)+j*-,*(n-)*(m-)+,w);
}
for(int i=;i<n;++i)
{
for(int j=;j<=m;++j)
{
w=read();
if(j==) add(*(n-)*(m-)+,*(i-)*(m-)+,w);
else if(j==m) add(*i*(m-),,w);
else add(*(i-)*(m-)+(j-)*,*(i-)*(m-)+(j-)*+,w);
}
}
for(int i=;i<n;++i)
{
for(int j=;j<m;++j)
{
w=read();
add(*(i-)*(m-)+(j-)*+,*(i-)*(m-)+j*,w);
}
}
}
int main()
{
clear();
n=read();m=read();
if(n== || m==)
{
if(n>m) swap(n,m);
int ans=INF;
for(int i=;i<m;++i)
{
w=read();
ans=min(ans,w);
}
if(ans==INF) ans=;//特判只有全图只有一个点的情况
printf("%d\n",ans);
return ;
}
getmap();
dis[]=;vis[]=;//编号为 0 的点为起始点(左上角)
q.push();
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
for (int i=head[u];i!= -;i=t[i].nex)
{
int v=t[i].to,w=t[i].dis;
if (dis[v]>dis[u]+w)
{
dis[v] = dis[u] + w;
if (!vis[v])
{
vis[v] = ;
q.push(v);
}
}
}
}
printf("%d\n",dis[*(m-)*(n-)+]);//(2*(m-1)*(n-1)+1)号点为终点(右下角)
return ;
}
后记:
因为蒟蒻水平有限,AC这题借鉴了两位大佬的bolg:
①LittleRewriter(洛谷题解)
②kafuuchino (机房的CRK大佬)
P4001 [BJOI2006]狼抓兔子的更多相关文章
- P4001 [BJOI2006]狼抓兔子(对偶图)
P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流.Dinic可以过,据说还跑得比正解快. 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu ...
- [洛谷P4001][BJOI2006]狼抓兔子
题目大意:给你一个n*m的网格图,有三种边,横的,纵的和斜的,要你求出它的最小割 题解:网络流 卡点:1.无向图,反向弧容量应和正向弧相同 C++ Code: #include<cstdio&g ...
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
传送门 明明只要最小割加点优化就能过的东西…… 然而我偏偏要去学平面图转对偶图结果发现课件关键地方看不清->这里 而且建图累的半死…… 说实话只要最大流建图的时候反向边直接设为当前边容量再加个当 ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- [BJOI2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- 1001. [BJOI2006]狼抓兔子【最小割】
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001 BJOI2006 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- [BJOI2006]狼抓兔子(网络流)
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
随机推荐
- How to do if the GM MDI cant connect with the software
When you use GM MDI on your laptop , you may meet some troubles . Such as it cant communicate with t ...
- MyEclipse如何配置Struts2源码的框架压缩包
1.MyEclipse如何配置Struts2源码的框架压缩包 如本机的Struts2框架压缩包路径为:D:\MyEclipseUserLibraries\struts\struts-2.3.15.3- ...
- HashMap的实现原理总结
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象. 当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到b ...
- android studio下载地址
AndroidStudio3.0 下载地址——高速下载 https://www.androiddevtools.cn/ 2017年08月20日 22:41:09 qq风轻云淡 阅读数:5559 ...
- socket - option编程:SO_REUSEADDR
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用.而且很多网友在编写网络程序时也会遇到这个问题.所以特意写了这么一篇文章,希望能够解答一些人的疑难. 其实这个问题在Ri ...
- SaaS公司融资的「22条军规 」(转)
编者按:本文是SaaS教父Jason Lemkin的一篇分享.他在文章中分享了他不投资一家公司的22条理由,希望对打算融资和正在融资的你有所启发. 为何有的早期创业公司能成功融资,而有的公司融资却屡遭 ...
- SSL/TLS代理(termination proxy)
A TLS termination proxy (or SSL termination proxy) is a proxy server that is used by an institution ...
- ZVAL——PHP源码分析
基于 PHP 5.6.20 ZVAL——php变量实现的基础 _zval_struct 结构体的定义位于 Zend/zend.h 322 行 typedef union _zvalue_value { ...
- FileZilla连接腾讯云Centos7
现在需要使用ftp快速上传资料去云机备份, 于是想到FileZilla. 生成密匙文件 登录腾讯云--ssh密匙 FileZilla Client 导入密匙文件 填写登录信息 连接 另外记得开放22端 ...
- 神经网络优化算法如何选择Adam,SGD
之前在tensorflow上和caffe上都折腾过CNN用来做视频处理,在学习tensorflow例子的时候代码里面给的优化方案默认很多情况下都是直接用的AdamOptimizer优化算法,如下: o ...