题目传送门

由题意得是最小割问题,又由最大流最小割定理可得只需要求无向图的最大流即可。

建双向边,跑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的更多相关文章

  1. BZOJ 1001: [BeiJing2006]狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 20029  Solved: 4957[Submit][ ...

  2. BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 19528  Solved: 4818[Submit][ ...

  3. 【BZOJ1001】狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 7530  Solved: 1724[Submit][S ...

  4. BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)

    题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  5. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  6. 【BZOJ】【1001】 【BJOI2006】狼抓兔子

    平面图最小割->对偶图最短路 平面图最小割转对偶图最短路= = 想到了就比较好写了…… 可能是我对区域的标号方式比较奇特?反正我没有特判n==1||m==1也能过2333(机智吧-(滚开啦你个自 ...

  7. 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割

    1001: [BeiJing2006]狼抓兔子 Description 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下 三种类型的道路 1:(x,y)<==>( ...

  8. BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   ...

  9. BJOI2006狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 9967  Solved: 2267[Submit][S ...

随机推荐

  1. Boost智能指针——weak_ptr

    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...

  2. 《React 与 Redux 开发实例精解》出版了!

    <React 与 Redux 开发实例精解>出版了! <React 与 Redux 开发实例精解>出版了! 关于 React 与 Redux React 与 Redux, 一个 ...

  3. swagger使用二:swagger配置多个项目注释

    在项目中采用swagger测试接口,提供接口给其他人员都非常的方便. 在swagger默认配置中,默认只显示接口访问层中的注释,可是很多的参数说明都已经在实体层中了啊?(如下图)不可能再把实体层中的模 ...

  4. openlayers中的自定制工具栏,包含画点、线、面

    先是在projectquantan-master这个项目中有一个EditingPanel这个工具条,也挺好的,功能挺全的,但是有一点就是只有画多边形的一个按钮,没有point和path俩个的,所以就想 ...

  5. GPU CUDA之——深入理解threadIdx

    http://blog.csdn.net/canhui_wang/article/details/51730264 摘要 本文主要讲述CUDA的threadIdx. 1. Grid,Block和Thr ...

  6. UVa 11400 - Lighting System Design(线性DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. ESlint 语法检测配置说明

    部分vue-cli脚手架创建的默认eslint规则: 代码末尾不能加分号 ; 代码中不能存在多行空行 tab键不能使用,必须换成两个空格 代码中不能存在声明了但未使用的变量 关闭eslint 这里只说 ...

  8. MVC身份验证Attribute简易版

    public class MemberValidationAttribute : AuthorizeAttribute { protected override bool AuthorizeCore( ...

  9. HTML&CSS 问题

    1.子div使用浮动,父div高度自适应(个人感觉好用) 方法: css: <style> .clear{ clear:both} </style> html:在父div关闭之 ...

  10. Swift:一个基于.NET Core的分布式批处理框架

    Swift是什么 从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合. Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发到多台服务器并 ...