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新加数据一组,可能会卡掉从前可以过的程序。

Solution

  乍一看是一道网络流的题,但是实际写完会发现超时超到姥姥家去了。

  定理:平面图的最大流=该图对偶图的最短路,某形象解释见某贴心神犇
  之后SPFA乱搞或Dijkstra乱搞,不过我建边的方式有点鬼畜。
 
 #include <cstdio>
#include <cstring>
using namespace std;
struct node
{
int v, w;
}edge[];
int fst[], nxt[], sss, ttt, dis[], q[], front, back;
bool inq[]; void qscanf(int &x)
{
char c = getchar();
x = ;
while(c < '' || c > '')
c = getchar();
while(c >= '' && c <= '')
x = x * + c - '', c = getchar();
} void addedge(int i, int u, int v, int w)
{
edge[i << ] = (node){v, w}, nxt[i << ] = fst[u], fst[u] = i << ;
edge[i << | ] = (node){u, w}, nxt[i << | ] = fst[v], fst[v] = i << | ;
} void SPFA()
{
memset(dis, , sizeof(dis));
dis[sss] = , inq[sss] = q[++back] = sss;
while(front != back)
{
int u = q[++front % ];
inq[u] = false, front %= ;
for(int i = fst[u]; i; i = nxt[i])
{
int v = edge[i].v, w = edge[i].w;
if(dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
if(!inq[v])
{
dis[v] = dis[u] + w;
inq[v] = true;
q[++back % ] = v;
back %= ;
}
}
}
}
} int main()
{
int n, m, etot = ;
qscanf(n), qscanf(m);
n--, m--;
if(n && m)
{
sss = n * m * + , ttt = n * m * + ;
for(int i = ; i <= n + ; i++)
for(int j = ; j <= m; j++)
{
int u = ((i - ) * m + j) * - , v = ((i - ) * m + j) * , w;
qscanf(w);
if(i == )
addedge(++etot, sss, v, w);
else if(i == n + )
addedge(++etot, u, ttt, w);
else
addedge(++etot, u, v, w);
}
for(int i = ; i <= n; i++)
for(int j = ; j <= m + ; j++)
{
int u = ((i - ) * m + j) * - , v = ((i - ) * m + j) * - , w;
qscanf(w);
if(j == )
addedge(++etot, ttt, v, w);
else if(j == m + )
addedge(++etot, u, sss, w);
else
addedge(++etot, u, v, w);
}
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
{
int u = ((i - ) * m + j) * - , v = ((i - ) * m + j) * , w;
qscanf(w), addedge(++etot, u, v, w);
}
SPFA();
}
else
{
if(m)
n = m;
dis[ttt] = ;
for(int i = ; i <= n; i++)
{
qscanf(fst[i]);
if(dis[ttt] > fst[i])
dis[ttt] = fst[i];
}
}
printf("%d\n", dis[ttt]);
return ;
}

[BZOJ1001] [Beijing2006] 狼抓兔子 (最短路)的更多相关文章

  1. BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*

    BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...

  2. [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)

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

  3. BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)

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

  4. BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...

  5. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

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

  6. BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)

    平面图的最小割转化为对偶图的最短路(资料:两极相通——浅析最大最小定理在信息学竞赛中的应用) ,然后DIJKSTRA就OK了. ------------------------------------ ...

  7. bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...

  8. bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)

    1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...

  9. [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图

    狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...

随机推荐

  1. 蓝桥杯 基础练习 之 FJ的字符串

    问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...

  2. HTML5VEDIO标签阿里云-微信浏览器兼容性问题

    在网页展示媒体对象,离不开HTML5的 audio和video对象.但这两个目前来看兼容性方面还得关注一下. 目前在做一个阿里云下载video 并在微信端播放mp4格式的视频的时候,碰到了一些兼容性问 ...

  3. MongoDB基础介绍安装与使用

    MongoDB已经日益成为流程和主流的数据库了,原因有两个:第一个就是技术优势,第二就是便利性,个人使用部署都很方便. MongoDB的优缺点,以及使用场景 优点: 面向文档存储(自由读高,不需要定义 ...

  4. Spring cloud oauth2.0 access_token 永不失效设置方法

    在AuthorizationServerConfigurerAdapter,重写一个TokenServices,注意这里的@Primary 非常重要,否则会有3个同类型的Bean,无法注入,会抛出以下 ...

  5. css y轴溢出滚动条,x轴溢出显示

    这个是我工作中遇到的一个问题,困扰了我好几天,彻底理解了什么叫思路很重要. 黄色盒子里的内容是要超出出现滚动条的,红色的方块是根据另外的元素去定位的,于是呢 我就加上了 overflow-y:auto ...

  6. FineUIPro控件库深度解析

    FineUIPro控件库 FineUIPro是一套基于jQuery的专业ASP.NET控件库,始于2008年的开源版FineUI控件库. 当年为了提升项目的开发效率,降低代码复杂度,减少对CSS和Ja ...

  7. NLP+语篇分析(五)︱中文语篇分析研究现状(CIPS2016)

    摘录自:CIPS2016 中文信息处理报告<第三章 语篇分析研究进展.现状及趋势>P21 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bcebo ...

  8. 第2章 PCI总线的桥与配置

    在PCI体系结构中,含有两类桥片,一个是HOST主桥,另一个是PCI桥.在每一个PCI设备中(包括PCI桥)都含有一个配置空间.这个配置空间由HOST主桥管理,而PCI桥可以转发来自HOST主桥的配置 ...

  9. 八爪鱼采集器︱爬取外网数据(twitter、facebook)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 要想采集海外数据有两种方式:云采集+单机采集. ...

  10. Windows下的Memcache安装:

    Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 'c:\memcac ...