【BZOJ 1001】[BJOI2006]狼抓兔子(最大流)
题目链接
最大流裸题,没什么好说吧,恰好点数多,考验网络流的效率,正好练\(Dinic\)。
#include <cstdio>
#include <queue>
#include <cstring>
#define INF 2147483647
using namespace std;
const int MAXN = 1000010;
const int MAXM = 8000010;
inline int read(){
    int s = 0, w = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar(); }
    while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); }
    return s * w;
}
struct Edge{
    int next, to, rest;
}e[MAXM];
int s, t, num = 1, n, m;
int head[MAXN];
inline void Add(int from, int to, int flow){
    e[++num] = (Edge){ head[from], to, flow }; head[from] = num;
    e[++num] = (Edge){ head[to], from, flow }; head[to] = num;
}
int level[MAXN], now, sum;
queue <int> q;
int re(){
	memset(level, 0, sizeof level);
    while(q.size()) q.pop();
    q.push(s); level[s] = 1;
    while(q.size()){
      now = q.front(); q.pop();
      for(int i = head[now]; i; i = e[i].next)
         if(e[i].rest && !level[e[i].to]){
           level[e[i].to] = level[now] + 1;
           q.push(e[i].to);
         }
    }
    return level[t];
}
int findflow(int u, int flow){
	if(!flow || u == t) return flow;
	int f = 0, t;
	for(int i = head[u]; i; i = e[i].next){
		if(e[i].rest && level[e[i].to] == level[u] + 1){
			f += (t = findflow(e[i].to, min(flow - f, e[i].rest)));
			e[i].rest -= t; e[i ^ 1].rest += t;
		}
	}
	if(!f) level[u] = 0;
	return f;
}
int dinic(){
    int ans = 0;
    while(re())
      ans += findflow(s, INF);
    return ans;
}
inline int id(int i, int j){
	return (i - 1) * m + j;
}
int main(){
    n = read(); m = read(); s = id(1, 1); t = id(n, m);
    for(int i = 1; i <= n; ++i)
    	for(int j = 1; j < m; ++j)
    	   Add(id(i, j), id(i, j + 1), read());
    for(int i = 1; i < n; ++i)
    	for(int j = 1; j <= m; ++j)
    	   Add(id(i, j), id(i + 1, j), read());
    for(int i = 1; i < n; ++i)
    	for(int j = 1; j < m; ++j)
    	   Add(id(i, j), id(i + 1, j + 1), read());
    printf("%d\n", dinic());
    return 0;
}
【BZOJ 1001】[BJOI2006]狼抓兔子(最大流)的更多相关文章
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
		题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ... 
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
		1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 23822 Solved: 6012[Submit][ ... 
- BZOJ 1001: [BeiJing2006]狼抓兔子
		1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ... 
- BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)
		1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 24727 Solved: 6276[Submit][ ... 
- BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)
		平面图的最小割转化为对偶图的最短路(资料:两极相通——浅析最大最小定理在信息学竞赛中的应用) ,然后DIJKSTRA就OK了. ------------------------------------ ... 
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
		题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ... 
- 【24.58%】【BZOJ 1001】狼抓兔子
		Time Limit: 15 Sec Memory Limit: 162 MB Submit: 19227 Solved: 4726 [Submit][Status][Discuss] Descrip ... 
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
		Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ... 
- 1001. [BJOI2006]狼抓兔子【最小割】
		Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ... 
- 【刷题】BZOJ 1001 [BeiJing2006]狼抓兔子
		Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ... 
随机推荐
- git向github提交时不输入账号密码
			缘由:每次向github提交代码时都要输入用户名密码,太麻烦了,影响效率 解决方案: 方案一: 在你的用户目录下新建一个文本文件.git-credentials Windows:C:/Users/us ... 
- Alpha冲刺阶段集合贴
			第一篇:http://www.cnblogs.com/xss6666/p/8870734.html 第二篇:http://www.cnblogs.com/xss6666/p/8893683.html ... 
- 第六周PSP &进度条
			团队项目PSP 一.表格: C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论alpha完成情况并总结 9:40 11:20 17 ... 
- TestNG套件测试
			TestNG套件测试 测试套件的测试是为了测试软件程序的行为或一系列行为的情况下,是一个集合.在TestNG,我们不能定义一套测试源代码,但它代表的套件是一个XML文件执行特征.这也允许灵活的配置要运 ... 
- bug:margin合并
			demo1和demo2存在margin合并问题:外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.弥补方案:bfc; 添加一 ... 
- scrollTop()案例
			设置 <div> 元素中滚动条的垂直偏移: 定义和用法 scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置. scroll top offset 指的是滚动条相对于其顶部的偏 ... 
- DjangoORM使用mysql注意
			注意事项1:需要在project下的setting里面做设置.让Django生成MySQL类型的数据库. 注意事项2:在Django内部,连MySQL的时候,需要添加下面2句代码: 4.******* ... 
- Qt 多线程同步与通信
			Qt 多线程同步与通信 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWrite ... 
- 【题解】APIO2014回文串
			哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ... 
- BZOJ 1070 修车  【费用流】
			Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ... 
