BZOJ 1001 狼捉兔子

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

 

这个刚看一眼以为是道网络流裸题(ISAP 跑无向图最小割),但看数据范围马上枪毙。

后来r_64大神犇教了一个平面图转对偶图求最小割的方法,时间复杂度是跑最短路的。

具体做法如下:

先将源点与汇点连接一条边,此边不与其他任何边相交,再将所有的平面surface看做一个点,平面与平面的边界看做一条边,边权即为边界的边权(之前连的除外,边权inf)。仔细想想,原图的最小割即为两个外围的大平面的最短路。

代码如下:

 1 #include<cstring>
 2 #include<queue>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 using namespace std;
 6 
 7 #define maxn 1010
 8 #define source 0
 9 #define sink (2*(n-1)*(m-1)+1)
10 const int inf = 1<<30;
11 int side[maxn*maxn*2],toit[maxn*maxn*6],n,m,dis[maxn*maxn*2];
12 int cnt = 1,next[maxn*maxn*6],len[maxn*maxn*6];
13 bool in[maxn*maxn*2];
14 
15 inline void add(int a,int b,int c)
16 {
17     toit[++cnt] = b;
18     next[cnt] = side[a];
19     side[a] = cnt;
20     len[cnt] = c;
21 }
22     
23 inline void ins(int a,int b,int c)
24 {
25     add(a,b,c); add(b,a,c);
26 }
27 
28 inline void build()
29 {
30     int a,i,j;
31     for (i = 1;i <= n;++i)
32     {
33         for (j = 1;j < m;++j)
34         {
35             scanf("%d",&a);
36             int up,down;
37             if (i == 1) up = sink;
38             else up = (i-2)*(m-1)+j;
39             if (i == n) down = source;
40             else down = (n-1)*(m-1)+(i-1)*(m-1)+j;
41             ins(up,down,a);
42         }
43     }
44     for (i = 1;i < n;++i)
45         for (j = 1;j <= m;++j)
46         {
47             scanf("%d ",&a);
48             int le,ri;
49             if (j == 1) le = source;
50             else le = (n-1)*(m-1)+(i-1)*(m-1)+j-1;
51             if (j == m) ri = sink;
52             else ri = (i-1)*(m-1)+j;
53             ins(le,ri,a);
54         }
55     for (i = 1;i < n;++i)
56         for (j = 1;j < m;++j)
57         {
58             scanf("%d ",&a);
59             int le,ri;
60             le = (i-1)*(m-1)+j;
61             ri = (i-1)*(m-1)+(n-1)*(m-1)+j;
62             ins(le,ri,a);
63         }
64 }
65 
66 inline int spfa()
67 {
68     queue <int> team;
69     in[source] = true; memset(dis,0x7,sizeof(dis));
70     dis[source] = 0; team.push(source);
71     int now,i;
72     while (!team.empty())
73     {
74         now = team.front(); team.pop();
75         for (i = side[now];i;i = next[i])
76             if (dis[toit[i]] > dis[now] + len[i])
77             {
78                 dis[toit[i]] = dis[now] + len[i];
79                 if (!in[toit[i]])
80                     in[toit[i]] = true,team.push(toit[i]);
81             }
82         in[now] = false;
83     }
84     return dis[sink];
85 }
86 
87 int main()
88 {
89     freopen("1001.in","r",stdin);
90     freopen("1001.out","w",stdout);
91     scanf("%d %d",&n,&m);
92     build();
93     printf("%d\n",spfa());
94     fclose(stdin); fclose(stdout);
95     return 0;
96 }

 

转载于:https://www.cnblogs.com/mmlz/p/4191431.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中怎么复制代码_Python对象怎么引用_Python对象怎么复制代码_一聚教程网

本次文章要给大家讲解的是Python对象引用及复制代码&#xff0c;相信这也是大家问题比较大的一个点&#xff0c;下面为大家具体整理了操作过程&#xff0c;一起来了解下。可以说Python没有赋值&#xff0c;只有引用。你这样相当于创建了一个引用自身的结构&#xff0c;所以导致…

python为什么是蟒蛇_Python 为什么推荐蛇形命名法?

关于变量的命名&#xff0c;这又是一个容易引发程序员论战的话题。如何命名才能更具有可读性、易写性与明义性呢&#xff1f;众说纷纭。 本期“Python为什么”栏目&#xff0c;我们将聚焦于变量命名中的连接方式&#xff0c;来切入这块是非之地&#xff0c;想要回答的问题是——…

可视化工具Navicat for MySQL-操作三

五、备份和还原MySQL数据库 在数据库的管理中&#xff0c;备份和还原是必须做认真做的事情&#xff0c;如果疏忽或者做粗糙了&#xff0c;那么一旦数据库故障后果不堪设想&#xff0c;所以Navicat同样也有备份和还原的功能&#xff0c;相比较创建功能&#xff0c;其备份功能则…

python mysql返回,python操作mysql数据-执行语句返回值直接返回字典类型

fetchall()将结果放在二维数组里面&#xff0c;每一行的结果在元组里面import pymysqldef export(table_name):conn pymysql.connect(host 118.24.3.40,user jxz,password,dbjxz,port3306,charset utf8)cur conn.cursor()cur.execute(select * from %s%table_name)print(cu…

如何在python中打开文件_Python文件处理:创建、打开、追加、读、写

在Python中&#xff0c;不需要导入外部库来读取和写入文件。Python为创建、写入和读取文件提供了内置的函数。 在本文中&#xff0c;我们将学习 如何创建文本文件 如何将数据附加到文件中 如何读取文件 如何逐行读取文件 Python中的文件模式 如何创建文本文件 使用Python&#…

python中response.text_Sanic response text() 函数用法和示例

response.text() 功能&#xff1a;Sanic 返回纯文本内容给浏览器。作为一个完整功能的web网站&#xff0c;一般是不会返回纯文本内容的&#xff0c;特殊情况下可选择使用本函数。response.text() 语法def text(body,status200, headersNone,content_type"text/plain;chars…

天池 在线编程 排名查询

文章目录1. 题目2. 解题1. 题目 描述 给一个二维数组scores表示每个学生的各科成绩&#xff0c;求出学生中总成绩排名第K的索引。 如果成绩一样&#xff0c;越早出现的排名越高。 0 < scores[i][j] < 100 示例&#xff1a; 输入: scores: [[90, 80, 70], [90, 90, 90],…

matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象

预处理图像将图像读入工作区。I imread(rice.png);imshow(I)图像中心的背景亮度比底部亮度高。预处理图像&#xff0c;使背景亮度更加均匀。第一步&#xff0c;使用形态学开运算删除所有前景(米粒)。开运算会删除无法完全包含结构元素的小对象。定义半径为 15 的盘形结构元素&…

[CentOS] 打造vim环境

安装vim yum install vim-enhanced 安装git rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install git 安装bundle插件 git clone https://github.com/gmarik/vundle.git /data/vim/bundle/vundle 配置vim vim /etc/vimrc 在文件…

python接活网站_python能自己接活_python开发接活 - CSDN

Python远程连接oracle数据库概要1。Python连接数据库代码:def oracledbConnect(自我):试题:康涅狄格州 cx_ (\u201Cmdm\u201D、\u201Cnetqin123\u201D,\u201C: 1521 \/敏捷\u201D)光标 ()(\u201Cselect * from t_user \直接安装oracle数据库客户端:安装win32_11gR2_。4. 安装in…

python调用metasploit自动攻击_Python实现远程调用MetaSploit的方法

本文较为详细的讲述了Python实现远程调用MetaSploit的方法&#xff0c;对Python的学习来说有很好的参考价值。具体实现方法如下&#xff1a;(1)安装Python的msgpack类库&#xff0c;MSF官方文档中的数据序列化标准就是参照msgpack。rootkali:~# apt-get install python-setupto…

oracle 02085,OracleDBLink创建和维护以及ORA-02085解决办法

今天业务需要&#xff0c;要跨库查询Oracle数据&#xff0c;于是想到了dblink, 下面一一细说&#xff0c;Oracle DBLink。今天业务需要&#xff0c;要跨库查询Oracle数据&#xff0c;于是想到了dblink, 下面一一细说&#xff0c;&#xff0c;Oracle DBLink。首先Oracle DBLink …

C#单例模式详解

C#要实现单例模式必须要有以下三点&#xff1a; 声明私有静态成员、私有化构造函数、静态函数返回实例。 private static GameManager s_GameManagernull;private GameManager(){}public static GetInstance(){if(!s_GameManager){s_GameManagernew GameManager();}return s_Ga…

python的使用说明_Python 的基本使用说明

#-*- coding: utf-8 -*-#/usr/bin/env python Python中默认的编码格式是 ASCII 格式&#xff0c;在没修改编码格式时无法正确打印汉字&#xff0c;所以在读取中文时会报错。 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #codingutf-8 就行了 #导入模块 cnf#imp…

notepad python设置_NotePad++上配置Python

1.安装好python以及notepad2.打开notepad点击"运行"菜单->"运行"按钮(或者直接按F5)在弹出的窗口内输入以下命令(命令解释见文尾)后点击“保存”&#xff1a;cmd /k cd /d "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)&q…

oracle将字段nullable设为Y,从DB模型中消除NULLable列的选项(为了避免SQL的三值逻辑)?...

不久之前,我一直在阅读SQL and Relational Theory by C. J. Date一书.作者因批评sql的三值逻辑(3VL)而闻名.1)作者强调了为什么在sql中应该避免使用3VL,但他没有概述如果不允许使用可空列的数据库模型的样子.我已经考虑了一下,并提出了以下解决方案.如果我错过了其他设计方案,我…

在Delphi中使用indy SMTP发送gmail邮件[转]

在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30| 分类&#xff1a; Delphi | 标签&#xff1a; |举报 |字号大中小 订阅 在Delphi中发送email很简单&#xff0c;发送ssl方式的gmail邮件也很简单&#xff0c;只要在使用的idSMTP上附加一个TIdSSLIOHandlerS…

LeetCode 1797. 设计一个验证系统(map)

文章目录1. 题目2. 解题1. 题目 你需要设计一个包含验证码的验证系统。 每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。 如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前…

git add remote_使用git管理嵌入式软件版本

点击上方蓝字关注我哦&#xff5e;你现在的Keil工程的版本控制是怎么管理的&#xff1f;可能有些人的做法是发布一个版本软件后将代码打一个包保存起来&#xff0c;作为此版本的备份。有一种常见的情况&#xff0c;当开始一项新功能的开发&#xff0c;并且最终的效果不理想老板…

xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?

作为IT人员&#xff0c;想必都知道Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Xshell作为专业的终端模拟器&#xff0c;可以用来登录Linux&#xff0c;从而通过命令来控制Linux系统&…