【BJOI2006】bzoj1001 狼抓兔子
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输出一个整数,表示参与伏击的狼的最小数量.
很明显要求最小割,但是复杂度O(n^3 * m^3)显然承受不了。由于是平面图,可以转成对偶图之后求最短路。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int oo=0x3f3f3f3f;
const int s=3000005,t=3000006,mod=3000008;
int fir[3000010],ne[7000010],to[7000010],w[7000010],
dis[3000010],in[3000010],que[3000010],
n,m,tot;
void add(int u,int v,int x)
{tot++;ne[tot*2]=fir[u];fir[u]=tot*2;to[tot*2]=v;w[tot*2]=x;ne[tot*2+1]=fir[v];fir[v]=tot*2+1;to[tot*2+1]=u;w[tot*2+1]=x;
}
bool init()
{int i,j,x;scanf("%d%d",&n,&m);if (n==1||m==1) return 0;for (i=1;i<=n;i++)for (j=1;j<m;j++){scanf("%d",&x);add(i==n?s:2*(i*m+j)+1,i==1?t:2*((i-1)*m+j),x);}for (i=1;i<n;i++)for (j=1;j<=m;j++){scanf("%d",&x);add(j==1?s:2*(i*m+j-1)+1,j==m?t:2*(i*m+j),x);}for (i=1;i<n;i++)for (j=1;j<m;j++){scanf("%d",&x);add(2*(i*m+j),2*(i*m+j)+1,x);}
/* for (i=1;i<=t;i++)for (j=fir[i];j;j=ne[j])printf("%d->%d:%d\n",i,to[j],w[j]);*/
}
int spfa()
{int hd,tl,u,i,v;memset(dis,0x3f,sizeof(dis));dis[s]=0;hd=0;tl=1;que[0]=s;while (hd!=tl){u=que[hd];hd++;hd%=mod;in[u]=0;for (i=fir[u];i;i=ne[i])if (dis[u]+w[i]<dis[v=to[i]]){dis[v]=dis[u]+w[i];if (!in[v]){in[v]=1;que[tl]=v;tl++;tl%=mod;}}}return dis[t];
}
int solve1()
{int i,ans=oo,x;if (m==1&&n==1) return 0;for (i=1;i<=m+n-2;i++){scanf("%d",&x);ans=min(ans,x);}return ans;
}
int main()
{if (init()) printf("%d\n",spfa());else printf("%d\n",solve1());
}
【BJOI2006】bzoj1001 狼抓兔子相关推荐
- P2030 - 【BJOI2006】狼抓兔子
P2030 - [BJOI2006]狼抓兔子 Description 八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现 ...
- 【BJOI2006】狼抓兔子
P2030 - [BJOI2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它 ...
- BZOJ1001 狼抓兔子 终于过了!
时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...
- [bzoj1001]狼抓兔子
现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点 ...
- bzoj1001狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001 狼抓兔子
最小割 代码 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) m ...
- bzoj1001/BJOI2006 狼抓兔子
1001: [BeiJing2006]狼抓兔子(传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.com/view/8f1fde586 ...
- 【BZOJ1001】狼抓兔子
[BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...
- 【BZOJ1001】狼抓兔子题解
BZOJ1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还 ...
最新文章
- flex+android+教程,android开发flex4.5入门教程.pdf
- 在xcode调试断点不能停在代码区的终极解决方案
- nyoj - 947(Max Xor)字典树
- Windows10 UWP开发 - 响应式设计
- 大规模markpoint特效
- ssm后台数据是为什么是空值_网易后台开发实习生面试总结
- 数据挖掘应用案例:RFM模型分析与客户细分(转)
- string 都不能作用于switch_谁带孩子争论不休?家庭教育谁也不能缺席,每个人的作用都不同...
- 图解:知识竞赛现场管理系统-PPT双屏版,展示题目时,试题内容提前预审修改及监控图片的产生使用等
- quartz 动态添加job_SpringBoot 集成Quartz发布、修改、暂停、删除定时任务
- Introduction to Computer Networking学习笔记(十九):rate guarantees交换速度保证
- 关于EOS主节点竞选
- filenet骗局_将FileNet P8与J2EE消息传递基础结构集成
- Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”解决方法
- VSCODE 关闭文件和资源管理器关联
- MySQL基础学习笔记
- python程序判断梅森素数_梅森素数的探索之旅
- 阿里云服务器ECS计算型c6和c6e有什么区别?还有c6a和c6t性能对比
- iOS开发 -- 一个被苹果下架的App,终于恢复上架
- *floa类型和long类型那个取值范围更大?