BZOJ1001或洛谷4001 [BJOI2006]狼抓兔子
BZOJ原题链接
洛谷原题链接
显然就是求最小割。
而对于一个平面图有结论,最大流=最小割=对偶图最短路。
所以这题可用最大流或是转换为对偶图求最短路,这里我是用的对偶图。
虽然理论上按上界算,这题\(Dinic\)应该是跑不过去的,不过因为网络流复杂度玄学,\(Dinic\)莫名跑得挺快的。
在转换对偶图的时候,注意\(n = 1\)或\(m = 1\)的情况。
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 2e6 + 10;
const int M = 7e6 + 10;
struct po {
int x, d;
bool operator < (const po &b) const
{
return d > b.d;
}
};
po X;
int fi[N], di[M], ne[M], da[M], dis[N], l, st, ed, n, m;
bool v[N];
priority_queue<po>q;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline void add(int x, int y, int z)
{
di[++l] = y;
da[l] = z;
ne[l] = fi[x];
fi[x] = l;
di[++l] = x;
da[l] = z;
ne[l] = fi[y];
fi[y] = l;
}
inline int ch(int x, int y, int L)
{
int k = ((x - 1) * (m - 1) + y) << 1;
return L ? k - 1 : k;
}
inline void add_row(int x, int y, int z)
{
if (!(x ^ 1))
add(ch(x, y, 0), ed, z);
else
if (!(x ^ n))
add(st, ch(x - 1, y, 1), z);
else
add(ch(x - 1, y, 1), ch(x, y, 0), z);
}
inline void add_col(int x, int y, int z)
{
if (!(y ^ 1))
add(st, ch(x, y, 1), z);
else
if (!(y ^ m))
add(ch(x, y - 1, 0), ed, z);
else
add(ch(x, y - 1, 0), ch(x, y, 1), z);
}
inline void add_opl(int x, int y, int z)
{
add(ch(x, y, 1), ch(x, y, 0), z);
}
int main()
{
int i, j, x, y;
n = re();
m = re();
st = (n - 1) * (m - 1) << 1 | 1;
ed = st + 1;
if (!(n ^ 1) || !(m ^ 1))
{
for (i = 1; i <= n; i++)
for (j = 1; j < m; j++)
add(st, ed, re());
for (i = 1; i < n; i++)
for (j = 1; j <= m; j++)
add(st, ed, re());
for (i = 1; i < n; i++)
for (j = 1; j < m; j++)
add(st, ed, re());
}
else
{
for (i = 1; i <= n; i++)
for (j = 1; j < m; j++)
add_row(i, j, re());
for (i = 1; i < n; i++)
for (j = 1; j <= m; j++)
add_col(i, j, re());
for (i = 1; i < n; i++)
for (j = 1; j < m; j++)
add_opl(i, j, re());
}
memset(dis, 60, sizeof(dis));
X.d = dis[X.x = st] = 0;
q.push(X);
while (!q.empty())
{
x = q.top().x;
q.pop();
if (v[x])
continue;
v[x] = 1;
for (i = fi[x]; i; i = ne[i])
if (dis[X.x = y = di[i]] > dis[x] + da[i])
{
X.d = dis[y] = dis[x] + da[i];
q.push(X);
}
}
printf("%d", dis[ed]);
return 0;
}
BZOJ1001或洛谷4001 [BJOI2006]狼抓兔子的更多相关文章
- BZOJ1001 洛谷4001 [BJOI2006]狼抓兔子 题解
题目 这个题目有多种解法,这个题也是一个比较经典的题了,正是因为他的多样的做法,这个题主要难在建图和优化,因为这是一个网格图,所以spfa肯定过不去,所以用最短路解法的话,只能用dij,而网络流也是要 ...
- [洛谷P4001][BJOI2006]狼抓兔子
题目大意:给你一个n*m的网格图,有三种边,横的,纵的和斜的,要你求出它的最小割 题解:网络流 卡点:1.无向图,反向弧容量应和正向弧相同 C++ Code: #include<cstdio&g ...
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
传送门 明明只要最小割加点优化就能过的东西…… 然而我偏偏要去学平面图转对偶图结果发现课件关键地方看不清->这里 而且建图累的半死…… 说实话只要最大流建图的时候反向边直接设为当前边容量再加个当 ...
- Luogu 4001 [BJOI2006]狼抓兔子
BZOJ 1001…… 并不会这个trick,所以笔记要详细一点. 前置知识 : 平面图转对偶图 传送门 听说直接$Dinic$就好了,还跑得比正解快…… 首先我们按照平面图的定义,把网格图中所 ...
- P4001 [BJOI2006]狼抓兔子(对偶图)
P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流.Dinic可以过,据说还跑得比正解快. 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
- BZOJ1001 BJOI2006 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- [BJOI2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
随机推荐
- 手机调试 fiddler
使用Fiddler调试手机程序 | 前端和运维利器 2015-11-27 zhy97031 文章来源 阅 688 转 4 转藏到我的图书馆 微信分享: 作者:Uncle Chen 原文 ...
- sql-mybatis-多表查询不查的字段一定不要查
在多表联查的时候,这时用的是左外联(即如果右边的没有就查出左边的表) 如果右边的没有,那么在Navicat中查询出如下图 而在mybatis中运用同样的查询语句时,查询出来字段的也是这样 这时如果左表 ...
- 生成Release apk
[生成Release apk] 1.使用Java SDK中的keytool生成keystore. Java SDK一般位于:C:\Program Files\Java\jdkx.x.x_x\bin. ...
- cdnbest如何配置ssl证书
cdnbest添加ssl证书有三种方式: 一.第一种在站点设置中添加: 点打开,加入证书后点提交 可以点检测功能检查证书是否有效,打勾说明证书是有效的 二. 第二种是在域名记录里添加: 如下图点击,添 ...
- Fiddler抓包域名过滤(转载)
转载自 http://www.cnblogs.com/111testing/p/6440480.html Fiddler抓包域名过滤 我们在用Fiddler抓包的时候会抓到很多不需要的数据包,我们怎样 ...
- Django 的认识,题型
Django 的认识,面试题 链接:https://www.cnblogs.com/chongdongxiaoyu/p/9403399.html 1. 对Django的认识? #1.Django是走大 ...
- zabbix_server.conf 详解
# This is a configuration file for Zabbix server daemon # To get more information about Zabbix, visi ...
- 数论----gcd和lcm
gcd即最大公约数,lcm即最小公倍数. 首先给出a×b=gcd×lcm 证明:令gcd(a,b)=k,a=xk,b=yk,则a×b=x*y*k*k,而lcm=x*y*k,所以a*b=gcd*lcm. ...
- Gym - 100989G 二分
链接:ECJTU 2018 Summer Training 1 - Virtual Judge https://vjudge.net/contest/236677#problem/G 谷歌翻译: 距 ...
- window中磁盘空间不足但是找不到使用空间的文件
今天看到 电脑的 d盘 空间爆红,空间满了,去找了找没有找到具体是哪个文件占用的空间.一个一个文件的查看属性,都没有找到.文件都不大,几百个g的空间就没了.莫名其妙!!! 自己开启了备份还原,存储的 ...