题目传送门

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

建双向边,跑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. Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作

    由于我是window 10 home 而不是 pro版本,只能使用Docker Toolbox,其实docker for window对windows的支持更好,还有GUI,home版本安装Docke ...

  2. SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理

    1972年,SAP诞生,推出了RF系统(实时财务会计系统), 后来命名为R1. R指Real time.3既指第三代系统,又代表3层架构. 三层架构分别为下图的Presentation server ...

  3. NET平台微服务

    .NET平台微服务项目汇集   最近博客园出现了一篇文章<微服务时代之2017年五军之战:Net PHP谁先死>,掀起了一波撕逼,作者只是从一个使用者的角度来指点江山,这个姿势是不对的.. ...

  4. MySQL语法一:数据定义语句

    MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...

  5. iOS动画的要素:CALayer维护数据模型和图片,沟通了CPU和GPU--视图中与图形绘制相关的功能

    1)iOS动画的模型:三层树模型: CALayer维护数据模型和图片,沟通了CPU和GPU:数据模型和图片本尊有CPU生成和维护:图片动画由GPU合成和呈现: https://developer.ap ...

  6. Yii中的relations方法

    以Blog示例: 重点看注释 User类中的relations方法如下 <span style="font-size:18px;background-color: rgb(255, 2 ...

  7. Thread-Specific-Storage for C/C++

    引用出处:https://www.cse.wustl.edu/~schmidt/PDF/TSS-pattern.pdf 摘要: 理论上多线程会提高程序性能,但实际上,由于在获取和释放锁的开销,多线程经 ...

  8. python3的print函数

    print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出: >>> print('The quick brown fox', 'jumps over', 'the ...

  9. ETL测试小结

    一.ETL测试的重要性: ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程)作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统 ...

  10. Python之基本排序算法的实现

    import cProfile import random class SortAlgorithm: def __init__(self,unsortedlist=[]): self.unsorted ...