[洛谷P4001][BJOI2006]狼抓兔子
题目大意:给你一个n*m的网格图,有三种边,横的,纵的和斜的,要你求出它的最小割
题解:网络流
卡点:1.无向图,反向弧容量应和正向弧相同
C++ Code:
#include<cstdio>
#include<cstring>
#include<cctype>
#define maxn 1010*1010
using namespace std;
const int inf=0x3f3f3f3f;
int n,m,a,u,v;
int d[maxn];
int q[maxn],h,t;
int start=1,end;
int head[maxn],cnt=2;
struct Edge{
int to,nxt,cost;
}e[maxn*6];
char ch;
void read(int &x){
ch=getchar();
while (!isdigit(ch))ch=getchar();
for (x=ch^48,ch=getchar();isdigit(ch);ch=getchar())x=x*10+(ch^48);
}
inline int min(int a,int b){return a<b?a:b;}
void add(int a,int b,int c){
e[cnt]=(Edge){b,head[a],c};head[a]=cnt;
e[cnt^1]=(Edge){a,head[b],c};head[b]=cnt^1;
cnt+=2;
}
bool bfs(){
memset(d,0,sizeof d);
d[q[h=t=1]=start]=1;
while (h<=t){
int x=q[h++];
if (x==end)return true;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if ((!d[to])&&e[i].cost){
d[to]=d[x]+1;
q[++t]=to;
}
}
}
return d[end];
}
int dfs(int x,int low){
if (x==end||!low)return low;
int res=0,w;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if ((d[to]==d[x]+1)&&e[i].cost){
w=dfs(to,min(low-res,e[i].cost));
e[i].cost-=w;
e[i^1].cost+=w;
res+=w;
if (res==low)return res;
}
}
if (!res)d[x]=-1;
return res;
}
void dinic(){
int ans=0,k;
while (bfs()){
k=dfs(start,inf);
if (k>0)ans+=k;
}
printf("%d\n",ans);
}
int main(){
read(n),read(m);
for (int i=1;i<=n;i++){
for (int j=1;j<m;j++){
read(a);
u=(i-1)*m+j,v=u+1;
add(u,v,a);
}
}
for (int i=1;i<n;i++){
for (int j=1;j<=m;j++){
read(a);
u=(i-1)*m+j,v=u+m;
add(u,v,a);
}
}
for (int i=1;i<n;i++){
for (int j=1;j<m;j++){
read(a);
u=(i-1)*m+j,v=u+m+1;
add(u,v,a);
}
}
end=n*m;
dinic();
return 0;
}
[洛谷P4001][BJOI2006]狼抓兔子的更多相关文章
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
传送门 明明只要最小割加点优化就能过的东西…… 然而我偏偏要去学平面图转对偶图结果发现课件关键地方看不清->这里 而且建图累的半死…… 说实话只要最大流建图的时候反向边直接设为当前边容量再加个当 ...
- BZOJ1001或洛谷4001 [BJOI2006]狼抓兔子
BZOJ原题链接 洛谷原题链接 显然就是求最小割. 而对于一个平面图有结论,最大流=最小割=对偶图最短路. 所以这题可用最大流或是转换为对偶图求最短路,这里我是用的对偶图. 虽然理论上按上界算,这题\ ...
- BZOJ1001 洛谷4001 [BJOI2006]狼抓兔子 题解
题目 这个题目有多种解法,这个题也是一个比较经典的题了,正是因为他的多样的做法,这个题主要难在建图和优化,因为这是一个网格图,所以spfa肯定过不去,所以用最短路解法的话,只能用dij,而网络流也是要 ...
- P4001 [BJOI2006]狼抓兔子(对偶图)
P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流.Dinic可以过,据说还跑得比正解快. 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu ...
- P4001 [BJOI2006]狼抓兔子
传送门 思路: 不少题解都是用网络流来做最小割(网络流是什么),但对于一个不会网络流的蒟蒻来做这题相当困难. 听机房daolao说可以重构图做最短路.然后就baidu将平面图转换成一个对偶图,因为网络 ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- [BJOI2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- 1001. [BJOI2006]狼抓兔子【最小割】
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
随机推荐
- Array-快餐管饱
一.如何获得一个数组? rsp: 1. [] 2.new Array() 3.str.split() ps:new Array()可以不加括号,其传一个参数代表数组长度,两个及以上就是初始化数组. ...
- 关于api接口
前阵子一直疯狂的找关于php的api接口方面的资料来学习,总结了一下,无非就是请求数据,然后返回数据,当然也要设置相关安全措施,比如认证口令 等.返回数据格式是json 还是xml 看自己需求咯
- Elasticsearch 常用API
1. Elasticsearch 常用API 1.1.数据输入与输出 1.1.1.Elasticsearch 文档 #在 Elasticsearch 中,术语 文档 有着特定的含义.它是指最顶 ...
- 爬虫之爬取斗鱼官网LOL部分主播的状态
一个爬虫小程序 爬取主播的排名及观看人数 import re import requests import request class Spider(): url = 'https://www.dou ...
- 第一个网页(仿照当当网,仅仅使用CSS)
这个网页是在学过CSS之后,对当当网首页进行模仿的网页,没有看当当网的网页源码,纯按照自己之前学的写的,由于是刚学过HTML和CSS才一个星期,所以里面有许多地方写的非常没有水平,仅仅用来学习使用,欢 ...
- Leecode刷题之旅-C语言/python-1.两数之和
开学后忙的焦头烂额(懒得很),正式开始刷leecode的题目了. 想了想c语言是最最基础的语言,虽然有很多其他语言很简单,有更多的函数可以用,但c语言能煅炼下自己的思考能力.python则是最流行的语 ...
- crest value &minimum
public class paixu { public static void main(String[] args) { double temp; double num[]={5.1, 7.12, ...
- 杭电 1003 Max Sum (动态规划)
参考:https://www.cnblogs.com/yexiaozi/p/5749338.html #include <iostream> #include <cstdio> ...
- fastlane自动化打包ipa并发布到firim或者蒲公英
1.打开终端,确保Xcode Command Line Tools 安装了最新版 xcode-select --install 2.安装fastlane sudo gem install -n /us ...
- 【数据库】 SQL SERVER 2014 实用新特性
[数据库] SQL SERVER 2014 实用新特性 官方链接 一. 内存优化表 大幅提高数据库性能,不过目前没有窗口化设计只能写语句 二. 索引增强