Bzoj1001 [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 19759 Solved: 4883
Description
Input
Output
输出一个整数,表示参与伏击的狼的最小数量.
Sample Input
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
HINT
2015.4.16新加数据一组,可能会卡掉从前可以过的程序。
Source
显然是一个最小割问题。
然而数据范围太大了,最小割妥妥会TLE
考虑把最小割转化为最短路:一个平面图的最小割问题可以转化成它的对偶图的最短路问题。
平面图中的每个面对应对偶图中的一个点,在这个问题中,可以将每个小三角形当成一个点,其左上角顶点是入点,右下角顶点是出点(网络流拆点思想)。
建边求最短路即可。
顺便测试了两种dijkstra,没注释掉的这个版本比注释掉的版本慢了约200ms,似乎大常数的inq判断比大常数的优先队列更耗时间?
- /*by SilverN*/
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- #include<vector>
- #include<queue>
- using namespace std;
- const int mxn=;
- int read(){
- int x=,f=;char ch=getchar();
- while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
- return x*f;
- }
- struct edge{int v,nxt,w;}e[mxn*];
- int hd[mxn],mct=;
- inline void add_edge(int u,int v,int w){
- e[++mct].v=v;e[mct].nxt=hd[u];e[mct].w=w;hd[u]=mct;return;
- }
- inline void insert(int u,int v,int w){
- add_edge(u,v,w);add_edge(v,u,w);return;
- }
- int n,m,S,T;
- inline int id(int x,int y,int k){return ((x-)*(m-)+y)*-(k^);}
- //inline int id(int x,int y,int k){return (x-1)*(m-1)*2+y*2-(k^1);}
- /*
- struct dst{int u,dis;};
- struct cmp{bool operator ()(const dst a,const dst b){return a.dis>b.dis;}};
- priority_queue<dst,vector<dst>,cmp>q;
- int dis[mxn];
- void dij(){
- memset(dis,0x3f,sizeof dis);
- while(!q.empty())q.pop();
- q.push((dst){S,0});
- dis[S]=0;
- while(!q.empty()){
- dst now=q.top();q.pop();
- int u=now.u;if(dis[u]<now.dis)continue;
- for(int i=hd[u];i;i=e[i].nxt){
- int v=e[i].v;
- if(dis[v]>dis[u]+e[i].w){
- dis[v]=dis[u]+e[i].w;
- q.push((dst){v,dis[v]});
- }
- }
- }
- return;
- }
- */
- int dis[mxn];
- struct cmp{bool operator ()(const int a,const int b){return dis[a]>dis[b];}};
- priority_queue<int,vector<int>,cmp>q;
- bool inq[mxn];
- void dij(){
- memset(dis,0x3f,sizeof dis);
- while(!q.empty())q.pop();
- q.push(S);
- dis[S]=;inq[S]=;
- while(!q.empty()){
- int u=q.top();q.pop();inq[u]=;
- for(int i=hd[u];i;i=e[i].nxt){
- int v=e[i].v;
- if(dis[v]>dis[u]+e[i].w){
- dis[v]=dis[u]+e[i].w;
- if(!inq[v]){
- inq[v]=;
- q.push(v);
- }
- }
- }
- }
- return;
- }
- int main(){
- int i,j,w;
- n=read();m=read();
- S=(n-)*(m-)*+;T=S+;
- for(i=;i<=n;i++){
- for(j=;j<m;j++){
- w=read();
- if(i==)insert(S,id(i,j,),w);
- else if(i==n)insert(id(i-,j,),T,w);
- else insert(id(i,j,),id(i-,j,),w);
- }
- }
- for(i=;i<n;i++){
- for(j=;j<=m;j++){
- w=read();
- if(j==)insert(T,id(i,j,),w);
- else if(j==m)insert(id(i,j-,),S,w);
- else insert(id(i,j-,),id(i,j,),w);
- }
- }
- for(i=;i<n;i++)
- for(j=;j<m;j++){
- w=read();
- insert(id(i,j,),id(i,j,),w);
- }
- dij();
- printf("%d\n",dis[T]);
- return ;
- }
Bzoj1001 [BeiJing2006]狼抓兔子的更多相关文章
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)
1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
随机推荐
- WebPack系列:Webpack编译的代码如何在tomcat中使用时静态资源路径不对的问题如何解决
问题: 使用webpack+vue做前端,使用tomcat提供api,然后npm run build之后需要将编译,生成如下文件: | index.html \---appserver ...
- Messenger
Messenger Mvvm提倡View和ViewModel的分离,View只负责数据的显示,业务逻辑都尽可能放到ViewModel中, 保持View.xaml.cs中的简洁(没有任何代码,除了构造函 ...
- 将某个Qt4项目升级到Qt5遇到的问题[转]
该Qt4项目以前是使用Qt4.7.4 MSVC2008开发的,因为使用到了OWC10(Office Web Components),使用MSVC编译器的话无法正常升级到Qt4.8.x和Qt5,于是将编 ...
- [bzoj2286][Sdoi2011]消耗战(虚树上的DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2286 分析:对于普通的树形dp:f[x]=min(∑f[son],m[x]),其中f[ ...
- go println与printf区别
Println 与Printf 都是fmt 包中的公共方法 Println :可以打印出字符串,和变量: Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整 ...
- 1-mkdir 命令总结
mkdir make directories 创建目录 [语法]: ls [选项] [参数] [功能介绍] mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任 ...
- android 布局之scrollview
今天在布局页面的时候后犯了难,我要显示的内容一个页面展示不完,怎么办呢? 于是随便找了个app点开一看,哎呀原来还能翻动啊!这是啥布局呢?原来是ScrollView 官方api相关的内容全是英文,这可 ...
- 转 Linux日志文件系统及性能分析
日志文件系统可以在系统发生断电或者其它系统故障时保证整体数据的完整性,Linux是目前支持日志文件系统最多的操作系统之一,本文重点研究了Linux常用的日志文件系统:EXT3.ReiserFS.XFS ...
- 【日常笔记】datatables表格数据渲染
现在有很多表格渲染方式 这里只是记录怎么使用datatables渲染数据 使用datatables可以更方便的来渲染数据 [中文api]http://datatables.club/index.htm ...
- 转载--web前端35个jQuery小技巧!
1. 禁止右键点击$(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...