题意分析

一看就是一道网络流的题目,然后上去最大流直接搞。
然后发现超时了,所以学了一波当前弧优化,然后就过了。
然后我觉得还可以再快一点,就IO加速了一下, 发现速度提高了400ms。
嗯,FASTIO还是很强的。
还有这道题是无向图,所以正反边容量都是w,一开始我建成正边w反边0,过不了。原因是有向图和无向图还是不一样的,会影响到增广的情况。
另外因为是平面图,所以可以求出对偶图,然后用最短路来求最小割。
我懒所以就不想学了。

代码总览

#include<bits/stdc++.h>
#define FI(n) FastIO::read(n)
using namespace std;
const int nmax = 1e6+10;
typedef struct{int to,nxt,w;
}Edge;
Edge e[nmax*6];
int head[nmax], dep[nmax];
int cur[nmax];
int tot = 0;
int n,m;
namespace FastIO {const int SIZE = 1 << 16;char buf[SIZE], obuf[SIZE], str[60];int bi = SIZE, bn = SIZE, opt;int read(char *s) {while (bn) {for (; bi < bn && buf[bi] <= ' '; bi++);if (bi < bn) break;bn = fread(buf, 1, SIZE, stdin);bi = 0;}int sn = 0;while (bn) {for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];if (bi < bn) break;bn = fread(buf, 1, SIZE, stdin);bi = 0;}s[sn] = 0;return sn;}bool read(int& x) {int n = read(str), bf;if (!n) return 0;int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';if (bf < 0) x = -x;return 1;}
};
void add(int u, int v, int w){e[tot].to = v;e[tot].nxt = head[u];e[tot].w = w;head[u]=tot++;
}
bool bfs(){queue<int> q;memset(dep,0,sizeof dep); dep[1] = 1; q.push(1);while(!q.empty()){int u = q.front(); q.pop();for(int i = head[u]; i!=-1;i = e[i].nxt){int v = e[i].to;if(e[i].w > 0 && dep[v] == 0){dep[v] = dep[u] +1;q.push(v);}}}return dep[n*m] != 0;
}
int dfs(int u, int dis){if(u == n*m || dis == 0) return dis;for(int & i = cur[u];i!=-1;i=e[i].nxt){int v = e[i].to, w = e[i].w;if(dep[v] == dep[u] +1 && w > 0){int tt = dfs(v,min(dis,w));if(tt > 0){e[i].w -= tt;e[i^1].w += tt;return tt;}}}return 0;
}
int Dinic(){int ans = 0;while(bfs()){for(int i = 1;i<=n*m;++i) cur[i] = head[i];while(int t = dfs(1,0x3f3f3f3f))ans += t;}return ans;
}
int main(){memset(head,-1,sizeof head);FI(n);FI(m);int w;for(int i = 0;i<n;++i){for(int j = 1;j<m;++j){FI(w);add(i*m+j,i*m+j+1,w);add(i*m+j+1,i*m+j,w);}}for(int i = 1;i<=n-1;++i){for(int j = 1;j<=m;++j){FI(w);add((i-1)*m+j,i*m+j,w);add(i*m+j,(i-1)*m+j,w);}}for(int i = 1;i<=n-1;++i){for(int j = 1;j<=m-1;++j){FI(w);add((i-1)*m+j,i*m+j+1,w);add(i*m+j+1,(i-1)*m+j,w);}}printf("%d\n",Dinic());return 0;
}

BZOJ1001 [BeiJing2006]狼抓兔子 (网络流)相关推荐

  1. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流

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

  2. [BZOJ1001]: [BeiJing2006]狼抓兔子

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

  3. BZOJ1001[BeiJing2006]狼抓兔子——最小割

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

  4. bzoj1001:[BeiJing2006]狼抓兔子

    传送门 最小割,一眼最小割,这个甚至不需要建什么模型,直接按它给的建就好了,最小割=最大流,跑个最大流就行了,注意:图是无向图 #include<cstdio> #include<q ...

  5. bzoj1001 [BeiJing2006]狼抓兔子(最小割/平面图最大流转对偶图最短路)

    首先这题显然就是求一个最小割.然后跑dinic加点优化也是可以过的. 这题还有一种更妙的做法:st平面图最大流转对偶图最短路.大概做法就是首先在原图中加一条s->t的边,然后把原图的一个面当作一 ...

  6. 【BZOJ1001】狼抓兔子题解

    BZOJ1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还 ...

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

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

  8. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

  9. 【BZOJ1001】狼抓兔子

    [BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...

最新文章

  1. 手势模型和Angular Material的实现
  2. Java工作笔记-使用jquery.timer.js实现数据自动刷新
  3. 信用评分系统运行原理中篇-分箱逻辑
  4. MySQL练习题和代码附录
  5. 2017.4.18-morning
  6. U盘快捷方式病毒修复
  7. linux 防DDOS防火墙脚本
  8. 【树莓派不吃灰】基础篇⑲ 搭建usb摄像头MJPG-streamer图片流监控,支持远程视频监控访问
  9. 如何修改 / 校正Linux系统时间
  10. 春节感悟 - 快递延误的售后问题
  11. Euler diagram
  12. 怎么mac ftp服务器文件夹,mac 访问 ftp服务器文件夹权限
  13. Postman测试工具调试接口详细教程【向后端发送Json数据并接收返回的Json结果】
  14. java调用有参方法_java 带参方法调用
  15. 投资者书单:用大师的智慧武装头脑
  16. 杭电 HDU 1234 开门人和关门人
  17. web在线显示ppt方案小结
  18. 大麦网信息泄露致用户被骗 承认存在技术漏洞
  19. gorm快捷查询手册
  20. strlen函数 的介绍

热门文章

  1. Python UTC
  2. c#中文字大全,转换为字符串格式
  3. 基于涂鸦智能开发的墨水屏座位管理器——2.嵌入式功能实现篇
  4. java盘盈盘亏_反映财产物资的盘盈、盘亏和毁损情况,应当设( )科目。
  5. xpdf工具(PDF转图片工具)
  6. 最强脱单指南:如何通过区块链应用快速找到女朋友?
  7. android 触摸屏部分失灵,触摸屏失灵修复小技巧
  8. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
  9. 22南工计算机学院新生培训最终章---ACM竞赛机制
  10. Hadoop生态圈:19个让大象飞起来的工具!