BZOJ1001_狼抓兔子_KEY
由题意得是最小割问题,又由最大流最小割定理可得只需要求无向图的最大流即可。
建双向边,跑Dinic,EK会超时。
注意在DFS时要加"if(!res)dist[now]=0;"这句话,不然会超时。
这句话因为下次DFSnow这个点时得到的最小流量为0,所以就没必要DFS下去,一个剪枝。
code:
/**************************************************************
Problem: 1001
User: yekehe
Language: C++
Result: Accepted
Time:1916 ms
Memory:102480 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; char tc()
{
static char fl[],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
} int read()
{
char c;while(c=tc(),(c<''||c>'')&&c!='-');
int x=,y=;c=='-'?y=-:x=c-'';
while(c=tc(),c>=''&&c<='')x=x*+c-'';
return x*y;
} const int MAXN=,MAXM=;
int N,M,ans;
struct edge{
int to,v;
}L[MAXM];
int head[MAXN],nxt[MAXM],cnt;
int l[MAXM],h,t,S,T,dist[MAXN]; void add(int x,int y,int fx,int fy,int c)
{
int u=(x-)*M+y,v=(fx-)*M+fy;
L[cnt]=(edge){v,c};
nxt[cnt]=head[u];
head[u]=cnt;
cnt++;
} bool BFS()
{
h=t=;
l[++t]=S;
memset(dist,,sizeof(dist));
dist[S]=;
while(h<t){
int front=l[++h];
for(int i=head[front];i!=-;i=nxt[i]){
int to=L[i].to;
if(!dist[to] && L[i].v){
dist[to]=dist[front]+;
l[++t]=to;
}
}
}
return dist[T];
} int DFS(int now,int x)
{
if(now==T)return x;
int res=;
for(int i=head[now];i!=- && x;i=nxt[i]){
int to=L[i].to;
if(dist[to]==dist[now]+ && L[i].v){
int fd=DFS(to,min(x,L[i].v));
x-=fd;L[i].v-=fd;
res+=fd;L[i^].v+=fd;
}
}
if(!res)dist[now]=;
return res;
} int main()
{
// freopen("x.txt","r",stdin);
N=read(),M=read();
memset(head,-,sizeof(head));
register int i,j;
int c;
for(i=;i<=N;i++)for(j=;j<M;j++)c=read(),add(i,j,i,j+,c),add(i,j+,i,j,c);
for(i=;i<N;i++)for(j=;j<=M;j++)c=read(),add(i,j,i+,j,c),add(i+,j,i,j,c);
for(i=;i<N;i++)for(j=;j<M;j++)c=read(),add(i,j,i+,j+,c),add(i+,j+,i,j,c);
S=,T=N*M;
while(BFS()){
ans+=DFS(S,2e9);
}
printf("%d",ans);
return ;
}
BZOJ1001_狼抓兔子_KEY的更多相关文章
- BZOJ 1001: [BeiJing2006]狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- 【BZOJ1001】狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 7530 Solved: 1724[Submit][S ...
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- 【BZOJ】【1001】 【BJOI2006】狼抓兔子
平面图最小割->对偶图最短路 平面图最小割转对偶图最短路= = 想到了就比较好写了…… 可能是我对区域的标号方式比较奇特?反正我没有特判n==1||m==1也能过2333(机智吧-(滚开啦你个自 ...
- 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
1001: [BeiJing2006]狼抓兔子 Description 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下 三种类型的道路 1:(x,y)<==>( ...
- BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
随机推荐
- Android进阶笔记14:3种JSON解析工具(org.json、fastjson、gson)
一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...
- WAS上配置数据源连接失败
问题描述: 在节点 cnshh171Node01 上的服务器 server1 上, 对数据源 testj2cbug 执行的测试连接操作 由于以下异常 java.sql.SQLException: 调用 ...
- PowerDNS简单教程(4):优化篇
目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇 http:/ ...
- JPA注解实现联合主键
当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化. packa ...
- perl的一些小函数——split、join、sort
有时候,我们需要将一个字符串或一行文本通过某种方式转换为单个的元素存储在数组中,或者将许多元素通过某种分割符,将他们组合成一个字符串.perl刚好就提供了这样的功能,通过split或者join分割或组 ...
- tmux 后台运行程序
之前写过tmux分屏,其实这个只是方便写代码啥的,那都还不是最重要的.跑模型时,一般一跑就是一整天都是常事. 电脑关机,睡眠,ssh连接失效都会断了程序运行. solution:tmux后台运行程序! ...
- C/C++心得-面向对象
首先本文以C++描述面向对象.面向对象应该可以说是C++对C最为重要的扩充.面向对象使得C++可以用更符合人的思维模式的方式编程,使得有一定基础的程序员可以更容易的写程序.相对于C,C++还有其他许多 ...
- Linux的vi&vim
vi和vim的基本介绍 1.基本介绍 所有的 Linux 系统都会内建 vi 文本编辑器. Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别 语法的正确性,方便程序设计. ...
- bootstrap-table页码ALL显示为NAN
在github上查阅找到的解决办法: https://github.com/wenzhixin/bootstrap-table/issues/435 页面部分: data-page-list=&quo ...
- react系列(二)高阶组件-HOC
高阶组件 简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. 我在之前的博客<闭包和类>中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用. ...