BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001
算法讨论:
1、可以用最大流做,最大流等于最小割。
2、可以把这个图转化其对偶图,然后在对偶图上跑最短路即可。
一个平面图的最小割等价于其对偶图从S到T的最短路。并不是所有的图都有对偶图,平面图也有一定的要求,自己可以百度一下。
代码(用BZOJ的数据测过了,但是在BZOJ上过不去。爆WA,并不知道是为什么,里面有个特判,并不知道有没有用处。)
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cstdio> using namespace std; const int N = + ;
const int inf = 0x3f3f3f3f; int n, cnt, m;
int head[N], que[N], dis[N];
bool vis[N]; struct Edge {
int from, to, dis, next;
}edges[N * ]; void add(int u, int v, int dis) {
++ cnt;
edges[cnt].from = u; edges[cnt].to = v;
edges[cnt].dis = dis; edges[cnt].next = head[u];
head[u] = cnt;
++ cnt;
edges[cnt].from = v; edges[cnt].to = u;
edges[cnt].dis = dis; edges[cnt].next = head[v];
head[v] = cnt;
} void spfa(int s, int t) {
int h = , tail = ;
for(int i = s; i <= t; ++ i) {
dis[i] = inf;
vis[i] = false;
}
vis[s] = true; dis[s] = ;
que[h] = s;
while(h <= tail) {
int x = que[h];
vis[x] = false;
for(int i = head[x]; i; i = edges[i].next) {
int v = edges[i].to;
if(dis[v] > dis[x] + edges[i].dis) {
dis[v] = dis[x] + edges[i].dis;
if(!vis[v]) {
que[++ tail] = v;
vis[v] = true;
}
}
}
++ h;
}
printf("%d\n", dis[t]);
} #define stone int main() {
#ifndef stone freopen("bjrabbit.in", "r", stdin);
freopen("bjrabbit.out", "w", stdout); #endif int tmp, s, t, x, mn = 0x3f3f3f3f;
scanf("%d%d", &n, &m);
s = ; t = (n - ) * (m - ) * + ;
tmp = (m - ) * ;
for(int i = ; i <= n; ++ i) {
for(int j = ; j < m; ++ j) {
scanf("%d", &x);
mn = min(x, mn);
if(i == ) {
add(j * + tmp * (i - ), t, x);
}
else if(i == n) {
add(s, j * + tmp * (i - ) - , x);
}
else {
add(j * + tmp * (i - ), j * + tmp * (i - ) - , x);
}
}
}
for(int i = ; i < n; ++ i) {
for(int j = ; j <= m; ++ j) {
scanf("%d", &x);
mn = min(x, mn);
if(j == ) {
add(s, tmp * (i - ) + , x);
}
else if(j == m) {
add(tmp * i, t, x);
}
else {
add(tmp * (i - ) + * (j - ), tmp * (i - ) + * (j - ) + , x);
}
}
}
for(int i = ; i < n; ++ i) {
for(int j = ; j < m; ++ j) {
scanf("%d", &x);
mn = min(mn, x);
add(tmp * (i - ) + j * , tmp * (i - ) + j * - , x);
}
}
if(n == || m == ) printf("%d\n", mn);
else spfa(s, t); #ifndef stone fclose(stdin); fclose(stdout); #endif return ;
}
1001
BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)的更多相关文章
- 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...
- BZOJ 1001 狼抓兔子 平面图的最小割
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1001 题目大意: 见链接 思路: 求最小割,平面图的最小割等价于对偶图的最短路 直接建 ...
- BZOJ 1001 狼抓兔子 (最小割转化成最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 27715 Solved: 7134[Submit][ ...
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- BZOJ1001:狼抓兔子(最小割最大流+vector模板)
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
随机推荐
- WinForm(C#)自定义控件之——RoundButton(圆形按钮)
最近需要做一个圆形的按钮,去CodeProject找了一下,发现有现成的可用,但不能完全满足我的需求.因此自己试着利用WinForm中的自定义组件功能,制作一个圆形按钮.圆形按钮小制作即将开始之前,先 ...
- Guava API学习之Multimap
相信大家对Java中的Map类及其之类有大致的了解,Map类是以键值对的形式来存储元素(Key->Value),但是熟悉Map的人都知 道,Map中存储的Key是唯一的.什么意思呢?就是假如我们 ...
- JS apply()的使用详解
首先: apply和call的区别在哪里? 其次: 什么情况下用apply,什么情况下用call? 最后: 一般在什么情况下可以使用apply? *************************** ...
- iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
现在很多的APP中都有slide view,左右滑动出现侧边菜单栏的功能,Weico这个应用就有. 网上有很多第三方的类库实现了这种效果,其实自己代码写的话也是很简单的,下面我将介绍两种方法实现s ...
- Ubuntu12.04 下修改Apache端口号
1:$sudo vim /etc/apache2/ports.conf NameVirtualHost *:80Listen 8090 #将此行的80修改成8090 2:sudo vim /etc/a ...
- cf B. Road Construction
http://codeforces.com/contest/330/problem/B这道题可以围着一个可以与任何一个城市建路的城市建设. #include <cstdio> #inclu ...
- JVM试用G1的垃圾收集器
因为以前用默认的GC,,老年代经常在占比超过99%才发生一个GC行为,感觉不爽...尽管每次FULL GC只要0.5S. 结合上次听中华构架师大会,一哥们分享的G1 GC...试试.. 就在TOMCA ...
- ThrottleStop
ThrottleStop 我的要开这个软件,睿频才能开.不然一直工作在1.8Ghz下默认频率太低了开了这个速度才有提升
- 《iPhone高级编程—使用Mono Touch和.NET/C#》
第1章 C#开发人员基于MonoTouch进行iPhone开发概述 1 1.1 产品对比 2 1.1.1 .NET Framework 2 1.1.2 Mono 2 1.1.3 MonoTouch 3 ...
- cxSplitter.HotZone 怎么给分隔条增加值
请使用它的类名指定HotZoneClassName . cxSplitter1.ResizeUpdate := True; cxSplitter1.HotZoneClassName := 'TcxMe ...