题目

传送门:QWQ

分析

  显然答案是最小割。

  然后dinic卡一卡过去了。

  其实是懒得写转对偶图:正解

  (dinic原来写的是vector,后来改的比较鬼畜

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+, INF=2e9;
struct Edge{
int from,to,cap,flow;
};
int siz=;
Edge edges[*maxn]; int G[maxn][];
int que[maxn];
int d[maxn], vis[maxn], cur[maxn];
int s,t;
void Addedge(int a,int b,int c){
// edges.push_back((Edge){a,b,c,0}); edges.push_back((Edge){b,a,c,0});
// int m=edges.size()-1; G[a].push_back(m-1); G[b].push_back(m);
edges[siz++]=(Edge){a,b,c,}; edges[siz++]=(Edge){b,a,c,};
G[a][++G[a][]]=siz-; G[b][++G[b][]]=siz-;
}
bool BFS(){
memset(vis,,sizeof(vis)); memset(que,,sizeof(que));
que[]=s;
d[s]=; vis[s]=;
int l=,r=;
while(l<r){
int x=que[l]; l++;
for(int i=;i<=G[x][];i++){
Edge v=edges[G[x][i]];
if(!vis[v.to] && v.flow<v.cap){
vis[v.to]=; d[v.to]=d[x]+;
que[r++]=v.to;
}
}
}
return vis[t];
}
int DFS(int x, int a){
if(x==t || a==) return a;
int flow=, f;
for(int& i=cur[x]; i<=G[x][]; i++){
Edge& v=edges[G[x][i]];
if(d[x]+==d[v.to] && (f=DFS(v.to,min(a,v.cap-v.flow)))){
v.flow+=f; edges[G[x][i]^].flow-=f;
if(!f) {d[v.to]=-;continue;}
flow+=f; a-=f;
if(a==) break;
}
}
return flow;
}
int Maxflow()
{
int flow=;
while(BFS()){
for(int i=;i<maxn;i++) cur[i]=;
flow+=DFS(s,INF);
}
return flow;
}
inline int getint()
{
int w=,q=;
char c=getchar();
while((c<'' || c>'') && c!='-') c=getchar();
if (c=='-') q=, c=getchar();
while (c>='' && c<='') w=w*+c-'', c=getchar();
return q ? -w : w;
} int main()
{
int n,m; scanf("%d%d",&n,&m);
if(n==&&m==){ puts(""); return ;
}
s=; t=n*m;
int capp;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
capp=getint();
Addedge(i*m+j,i*m+j+,capp);
// printf("*** %d %d %d\n",i*m+j,i*m+j+1,capp);
}
}
for(int i=;i<n;i++){
for(int j=;j<=m;j++){
capp=getint();
Addedge(m*(i-)+j,i*m+j,capp);
// printf("*** %d %d %d\n",m*(i-1)+j,i*m+j,capp);
}
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
capp=getint();
Addedge(m*(i-)+j,i*m+j+,capp);
// printf("*** %d %d %d\n",m*(i-1)+j,i*m+j+1,capp);
}
}
printf("%d\n",Maxflow());
return ;
}

【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)的更多相关文章

  1. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

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

  2. BZOJ 1001: [BeiJing2006]狼抓兔子 最小割

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...

  3. bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...

  4. BZOJ.1001.[BeiJing2006]狼抓兔子(最小割ISAP)

    题目链接 为什么这题网络流这么快,海拔那题就那么慢.. //119968kb 544ms //路不是有向的,所以要建四条边..既然如此就直接将反向边的流量设为w了.(or MLE...) #inclu ...

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

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

  6. 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路

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

  7. BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...

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

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

  9. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

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

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

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

随机推荐

  1. 访问IO设备

    http://blog.csdn.net/goodluckwhh/article/details/16986871 内存屏障主要解决的问题是编译器的优化和CPU的乱序执行.编译器在优化的时候,生成的汇 ...

  2. GPU编程自学5 —— 线程协作

    深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...

  3. Linux之Ubuntu

    1.1 使用创建用户登陆 Ubuntu 默认root用户无法登陆,只能使用在安装系统的时候新创建的用户登录 我这里新建的用户是ubuntu密码111111 1.2 安装ssh server 由于新建的 ...

  4. PHP中echo(),print(),print_r()之间的区别?

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只能打印出简单类型变量的值(如int,string) print_r可以打印出复杂类 ...

  5. Python:数据结构(list, tuple, Dict & Set)

    list: Python中内置的有序数据结构,即数组.由于Python是动态语言,因此数组元素的类型没有限定. classmates = [“Michael”, “David”,”Bob”,”Trac ...

  6. BZOJ4832: [Lydsy1704月赛]抵制克苏恩(记忆化&期望)

    Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 ...

  7. c语言标识符

    在程序中使用的变量名.函数名.标号等统称为标识符. 除库函数的函数名由系统定义外,其余都由用户自定义. C 规定,标识符只能是字母(A-Z,a-z).数字(0-9).下划线()组成的字符串,并且其第一 ...

  8. Exception.Data 为异常添加更多调试信息

    我们抛出异常是为了知道程序中目前的状态发生了错误.为了能够知道错误的详细信息便于我们将来避免产生这样的错误,我们会选用合适的异常类型,在异常中编写易于理解的 message 信息.但是有时我们需要更多 ...

  9. Balanced Substring

    You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s is a string ...

  10. 【mongodb】Mongodb初识

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...