【bzoj1001】【狼抓兔子】
1001: [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 12719 Solved: 3017
[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
看着论文学了一下平面图和对偶图 url=1oA7Svl0XEyQmqJgAjE1HKIEUKbqHaoi8qybJYLef5Z646hXs2AETmTQRwfkFBnN4dhouxiwc2YhAQTZSrgWaQqNP-RnhoM7VDdsFz92ziq">《两极相通—浅析最大最小定理在信息学竞赛中的应用》
事实上就是将这个平面图转化成一个对偶图,在这个对偶图上求最短路的长度,就是原来平面图的最小割。
#include<iostream>
#include<cstdio>
#include<cstring>
#define T n*(m-1)+(n-1)*m+(n-1)*(m-1)-n*m+3
using namespace std;
const int N=2001000;
int n,m,point[N],next[N*3],tot=1,ans,dis[N],l[10000000];
struct S{
int st,en,va;
}aa[N*3];
bool f[N];
inline void add(int x,int y,int z)
{
tot+=1,next[tot]=point[x];point[x]=tot;
aa[tot].st=x;aa[tot].en=y;aa[tot].va=z;
tot+=1,next[tot]=point[y];point[y]=tot;
aa[tot].st=y;aa[tot].en=x;aa[tot].va=z;
}
inline int SPFA(int x,int y)
{
int h=1,t=1,u,i;
memset(dis,127/3,sizeof(dis));
memset(f,1,sizeof(f));
l[h]=x;dis[x]=0;
while(h<=t){
u=l[h];
f[u]=true;
for(i=point[u];i;i=next[i])
if(dis[aa[i].en]>dis[u]+aa[i].va){
dis[aa[i].en]=dis[u]+aa[i].va;
if(f[aa[i].en]){
f[aa[i].en]=false;
t+=1;
l[t]=aa[i].en;
}
}
h+=1;
}
return dis[y];
}
int main()
{
int i,j,x,y,z;
scanf("%d%d",&n,&m);
ans=210000000;
for(i=1;i<=n;++i)
for(j=1;j<m;++j){
scanf("%d",&x);
if(n==1) ans=min(ans,x);
if(i==1) add(1,j*2+1,x);
else if(i==n) add((i-2)*(m-1)*2+j*2,T,x);
else add((i-2)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2+1,x);
}
for(i=1;i<n;++i)
for(j=1;j<=m;++j){
scanf("%d",&x);
if(m==1) ans=min(ans,x);
if(j==1) add((i-1)*(m-1)*2+2,T,x);
else if(j==m) add(1,i*(m-1)*2+1,x);
else add((i-1)*(m-1)*2+(j-1)*2+1,(i-1)*(m-1)*2+j*2,x);
}
for(i=1;i<n;++i)
for(j=1;j<m;++j){
scanf("%d",&x);
add((i-1)*(m-1)*2+j*2,(i-1)*(m-1)*2+j*2+1,x);
}
if(n==1&&m==1) ans=0;
if(n==1||m==1) printf("%d\n",ans);
else printf("%d\n",SPFA(1,T));
}
【bzoj1001】【狼抓兔子】的更多相关文章
- bzoj1001狼抓兔子 对偶图优化
bzoj1001狼抓兔子 对偶图优化 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路 菜鸡总是要填坑的! 很明显让你求网格图的最 ...
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- bzoj1001狼抓兔子
1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...
- BZOJ1001:狼抓兔子(最小割最大流+vector模板)
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...
- BZOJ1001 狼抓兔子(裸网络流)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- 【建图+最短路】Bzoj1001 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- BZOJ1001 狼抓兔子 平面图转对偶图 最小割
现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为 ...
- 最大流最小割——bzoj1001狼抓兔子,洛谷P2598
前置知识 平面图 平面图就是平面上任意边都不相交的图.(自己瞎画的不算XD) 对偶图 比如说这个图,我们发现平面图肯定会把平面分成不同的区域(感觉像拓扑图),并把这些区域当做每个点(不被包围的区域独自 ...
- BZOJ1001 狼抓兔子
最小割 代码 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) m ...
- [BJOI2006][bzoj1001] 狼抓兔子 [最小割]
题面: 传送门 思路: 其实就是一道最小割的题目...... 我的写法加了两个优化,常数比较小,所以过掉了 一个是当前弧,一个是若当前点并不能流出去,那么标记dep为-1 听说正解是对偶图最短路?可以 ...
随机推荐
- Android PopWindow的替代品BasePopup
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/109 背景描述 最近一段时间,又看到了这个开源项目Base ...
- BootStrap 资源包的下载和使用
将附件中的包解压,放置webroot中,并在jsp页面中引用它们,即可以使用 bootstrap.rar (78.9 KB) 下载次数: 0
- Asp.net MVC4 Step By Step(5)-使用Web API
Web API是ASP.net MVC4新增的一个特色, 应用于处理Ajax请求, 他同时使用了Web标准规范, 比如Http, Json,和XML,以及一系列构建REST数据服务的参考原则, 和AS ...
- HTTPS 为什么更安全,先看这些
HTTPS 是建立在密码学基础之上的一种安全通信协议,严格来说是基于 HTTP 协议和 SSL/TLS 的组合.理解 HTTPS 之前有必要弄清楚一些密码学的相关基础概念,比如:明文.密文.密码.密钥 ...
- Leetcode0019--Remove Nth Node From End of List 移除链表第N个结点
[转载请注明]http://www.cnblogs.com/igoslly/p/8672656.html 看一下题目: Given a linked list, remove the nth node ...
- Project Management -- How to use GitHub with Git
如何通过Git使用GitHub ——PM曾子轩 从未使用过Git 一.从官网下载Git 此部分略 二.用Git连接上GitHub(为保持完整性,此部分引用博客:https://www.cnblogs. ...
- selenium选错弹出层的下拉框
要先选中这个弹出层的form元素,再找下拉框 public void downSelectBox(){ driver.get("https://www.imooc.com/user/setp ...
- 用Python+selenium打开IE浏览器和Chrome浏览器的问题
这几天在学Python+selenium自动化,对三大浏览器Firefox,Chrome和IE都做了尝试,也都分别下载了对应的webdriver,如:geckodriver.chromedriver. ...
- CXF-JAX-WS开发(一)入门案例
一.Web Service 1.定义 W3C定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作. 2.作用 多系统间数据通信 二.CXF是什么? CXF是目 ...
- Centos6.6 编译安装nginx
一.基本环境 nginx 1.9版以后增加了一些新的特性,支持tcp负载均衡,不过这次还是用1.8.0,这里面有个memcached的代理模块,有时间再测试下 1.centos6.6 2.nginx1 ...