传送门
题目大意:求给出图的最小割(……题目就是这个意思)。
明眼一看,这就是一个裸的最大流,可是被数据范围吓住了,有106个点,然后又有3∗106条边,对于网络流可怜的O(n2m)的时间复杂度来说,简直是怪兽……但之前有同学告诉我,这道题就是最大流,我就硬着头皮上了一个ISAP,光荣超时,然后去找题解(想不出来了……)发现了两种,一种是把每一个面当做一个点,然后做最短路,即得最小割的容量,另一种竟然还是硬上网络流……黄学长用的dinic只用了800ms,而我之前的ISAP却用了15000+ms这不科学啊。然后我尝试着预标号,然后再ISAP,竟然只要500ms,太神了……
以后一定记住,要先预处理一遍!

代码:

/**************************************************************Problem: 1001User: geng4512Language: C++Result: AcceptedTime:552 msMemory:87896 kb
****************************************************************/#include<cstdio>
#include<cstring>
const int MAXN = 1001*1001;
inline int min(int a, int b) {return a < b ? a : b;}
int ecnt = -1;
struct node {int v, w, nxt;
}Edge[MAXN*6];
int Adj[MAXN], q[MAXN];
bool vis[MAXN];
void Addedge(int u, int v, int w) {node *t = &Edge[++ ecnt];t->v = v; t->w = w; t->nxt = Adj[u];Adj[u] = ecnt;t = &Edge[++ ecnt];t->v = u; t->w = w; t->nxt = Adj[v];Adj[v] = ecnt;
}
char c;
inline void GET(int &n) {n = 0;do c = getchar(); while(c > '9' || c < '0');while('0' <= c && c <= '9') {n=n*10+c-'0';c=getchar();}
}
int n, m, ans, S, T, d[MAXN], vd[MAXN], N;
int aug(int u, int augco) {int dmin = N-1, augc = augco, delta;if(u == T) return augco;for(int i = Adj[u]; ~i; i = Edge[i].nxt)if(Edge[i].w > 0) {if(d[Edge[i].v]+1 == d[u]) {delta = min(augc, Edge[i].w);delta = aug(Edge[i].v, delta);Edge[i].w -= delta;Edge[i^1].w += delta;augc -= delta;if(d[S] >= N) return augco - augc;if(!augc) return augco;}if(dmin > d[Edge[i].v]) dmin = d[Edge[i].v];}if(augco == augc) {-- vd[d[u]];if(!vd[d[u]]) d[S] = N;d[u] = ++ dmin;++ vd[dmin];}return augco - augc;}
void bfs() {int l = 0, r = 0, u;q[++ r] = T; vis[T] = 1; vd[0] ++;while(l < r) {u = q[++ l];for(int i = Adj[u]; ~i; i = Edge[i].nxt) {if(vis[Edge[i].v]) continue;d[Edge[i].v] = d[u] + 1;++ vd[d[u]+1];vis[Edge[i].v] = 1;q[++r] = Edge[i].v;}}
}
void sap() {bfs();while(d[S] < N)ans += aug(S, 0x7fffffff);
}
int main()
{int w;memset(Adj, -1, sizeof Adj);GET(n); GET(m);for(int i = 0; i < n; ++ i)for(int j = 0; j < m-1; ++ j) {GET(w);Addedge(i*m+j, i*m+j+1, w);}for(int i = 0; i < n-1; ++ i)for(int j = 0; j < m; ++ j) {GET(w);Addedge(i*m+j, (i+1)*m+j, w);}for(int i = 0; i < n-1; ++ i)for(int j = 0; j < m-1; ++ j) {GET(w);Addedge(i*m+j, (i+1)*m+j+1, w);}T = n*m-1; N = n*m;sap();printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/geng4512/p/5296896.html

BZOJ1001: [BeiJing2006]狼抓兔子 (最小割)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. bzoj1001:[BeiJing2006]狼抓兔子

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

  7. BZOJ1001 [BeiJing2006]狼抓兔子 (网络流)

    题意分析 一看就是一道网络流的题目,然后上去最大流直接搞. 然后发现超时了,所以学了一波当前弧优化,然后就过了. 然后我觉得还可以再快一点,就IO加速了一下, 发现速度提高了400ms. 嗯,FAST ...

  8. 【BZOJ1001】狼抓兔子题解

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

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

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

  10. 【BZOJ1001】狼抓兔子

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

最新文章

  1. 2020-2021Android中高级面试题大全
  2. VLC通信仿真中数字脉冲间隔调制(DPIM)实例
  3. Acwing第 18 场周赛【完结】
  4. input file 上传文件格式限制
  5. python解析xml文件elementtree_Python中使用ElementTree解析XML示例
  6. 什么是java序列化,如何实现java序列化?
  7. npoi excel 复制行_Excel的格式刷功能你真的会用吗?这样刷更加方便快捷
  8. mysql pxc启动_Percona XtraDB Cluster(PXC) 无法正常启动
  9. “Google只认钱!机器学习20年没进步”,CMU学者炮轰AI第一大厂
  10. kafka producer写入超时
  11. 安利几个优质nlp开源项目
  12. mysql 判断日志时间早_MySQL5.7慢查询日志时间与系统时间差8小时原因详解
  13. 强化学习(reinforcement learning)教程(后面是翻译)
  14. 幸运抽奖java_Java 幸运抽奖项目
  15. 保证接口数据安全的10种方案
  16. Stata软件做门槛回归模型(汉森个人主页上的代码)
  17. 麦子学院Linux教程:环境搭建
  18. 计算机黑屏的原因及解决办法,电脑突然黑屏重启的原因及解决办法
  19. 已解决:jdk版本冲突,nested exception is java.lang.UnsupportedClassVersionError:JVMCFRE003
  20. 卷积神经网络(CNN)超详细介绍

热门文章

  1. [转载] 七龙珠第一部——第020话 修行的威力
  2. Nvelocity 第二章 注释语法
  3. 支付宝退款接口及反回参数
  4. 【很好的分享】zookeeper系列
  5. golang调用c++的dll库文件
  6. (十)unity4.6学习Ugui中文文档-------參考-UGUI Canvas Components
  7. Core Data持久化数据存储(1)
  8. Android Listener侦听的N种写法
  9. photon四种同步方式_Map 四种同步方式的性能比较
  10. 怎样控制小程序tabbar图标大小_微信小程序设计规范经验分享