【bzoj2007】[Noi2010]海拔 最小割+对偶图+最短路
题目描述
.bmp)
输入
输出
样例输入
1
1
2
3
4
5
6
7
8
样例输出
3
题解
最小割转对偶图最短路
首先肯定有:1个点的高度只可能是0或1,且所有“0”、所有“1”都是相连的。即只有两片区域,左上为“0”区域,右下为“1”区域。
那么题目就转化为一个最小割模型。
但是点数太多,直接求最大流会TLE,于是转化为对偶图求解。
具体同 bzoj1001 。
然而这题是有向图,需要考虑方向。
考虑到朝右下的边是s->t方向,而朝左上的边是t->s方向。
所以求对偶图的边时,也需要使用相同的方向,即朝右下的边是s'->t'方向,朝左上的边是t'->s'方向,如下图所示。
然后跑堆优化Dijkstra即可。
#include <cstdio>
#include <cstring>
#include <utility>
#include <queue>
using namespace std;
priority_queue<pair<int , int> > q;
int head[250010] , to[1003000] , len[1003000] , next[1003000] , cnt , dis[250010] , vis[250010] , n , num[510][510];
void add(int x , int y , int z)
{
to[++cnt] = y;
len[cnt] = z;
next[cnt] = head[x];
head[x] = cnt;
}
int main()
{
int i , j , x , s , t;
scanf("%d" , &n);
s = 0 , t = n * n + 1;
for(i = 1 ; i <= n ; i ++ )
num[0][i] = num[i][n + 1] = s , num[i][0] = num[n + 1][i] = t;
for(i = 1 ; i <= n ; i ++ )
for(j = 1 ; j <= n ; j ++ )
num[i][j] = n * (i - 1) + j;
for(i = 0 ; i <= n ; i ++ ) for(j = 1 ; j <= n ; j ++ ) scanf("%d" , &x) , add(num[i][j] , num[i + 1][j] , x);
for(i = 1 ; i <= n ; i ++ ) for(j = 0 ; j <= n ; j ++ ) scanf("%d" , &x) , add(num[i][j + 1] , num[i][j] , x);
for(i = 0 ; i <= n ; i ++ ) for(j = 1 ; j <= n ; j ++ ) scanf("%d" , &x) , add(num[i + 1][j] , num[i][j] , x);
for(i = 1 ; i <= n ; i ++ ) for(j = 0 ; j <= n ; j ++ ) scanf("%d" , &x) , add(num[i][j] , num[i][j + 1] , x);
memset(dis , 0x3f , sizeof(dis));
dis[s] = 0;
q.push(make_pair(0 , s));
while(!q.empty())
{
x = q.top().second , q.pop();
if(vis[x]) continue;
vis[x] = 1;
for(i = head[x] ; i ; i = next[i])
if(dis[to[i]] > dis[x] + len[i])
dis[to[i]] = dis[x] + len[i] , q.push(make_pair(-dis[to[i]] , to[i]));
}
printf("%d\n" , dis[t]);
return 0;
}
【bzoj2007】[Noi2010]海拔 最小割+对偶图+最短路的更多相关文章
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
题目链接 想一下能猜出,最优解中海拔只有0和1,且海拔相同的点都在且只在1个连通块中. 这就是个平面图最小割.也可以转必须转对偶图最短路,不然只能T到90分了..边的方向看着定就行. 不能忽略回去的边 ...
- [NOI2010]海拔——最小割+对偶图
题目链接 SOLUTION 想一下最优情况下肯定让平路或下坡尽量多,于是不难想到这样构图:包括左上角的一部分全部为\(0\),包括右下角的一部分全部为\(1\),于是现在问题转化为求那个分界线是什么. ...
- bzoj 2007 [Noi2010]海拔——最小割转最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2007 一个点的高度一定不是0就是1.答案一定形如一个左上角的连通块全是0的点.一个右下角的连 ...
- 【BZOJ-2007】海拔 最小割 (平面图转对偶图 + 最短路)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2095 Solved: 1002[Submit][Status] ...
- BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割
题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- [NOI2010]海拔(最小割)
题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个 正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...
- BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...
- 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
随机推荐
- JS数组push一个对象
这个是正确的数据添加对象 var dypieArr = []; var dyArr = []; var arrStr = ''; for(var i = 0; i < dataStreet.le ...
- Phpstrom开发工具
下载地址 https://www.jetbrains.com/zh/phpstorm/specials/phpstorm/phpstorm.html?utm_source=baidu&utm_ ...
- 20190105-打印字母C,H,N,口等图像和杨辉三角
1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...
- Python协程中使用上下文
在Python 3.7中,asyncio 协程加入了对上下文的支持.使用上下文就可以在一些场景下隐式地传递变量,比如数据库连接session等,而不需要在所有方法调用显示地传递这些变量.使用得当的话, ...
- Linux:如何获取打开文件和文件描述符数量
一.linux的文件描述符 文件描述符(FD:file descriptors),也可以说是文件句柄,当某个程序打开文件时,内核返回相应的文件描述符,程序为了处理该文件必须引用此描述符.文件描述符是一 ...
- Python字符串处理:过滤字符串中的英文与符号,保留汉字
使用Python 的re模块,re模块提供了re.sub用于替换字符串中的匹配项. re.sub(pattern, repl, string, count=0) 参数说明: pattern:正则重的模 ...
- vs13发布web程序 iis上
一.配置iis 1,找到控制面板--程序--启用或关闭Windows功能 2,从列表中选择Internet Infomation Services,并且把相应的功能条目勾选上,如果不清楚,可以全部选中 ...
- Python3全栈学习目录
http://www.cnblogs.com/wupeiqi/articles/4938499.html 文辉整理: http://blog.51cto.com/9272317/1869914
- 海思NB-IOT的SDK添加AT指令方法
1. 首先打开app_at_cmd_parse.c文件,在文件的末尾找到,可在中间添加需要的代码 /查询电信自注册结果 {AT_FLAG_VISIABLE | AT_FLAG_LOGABLE, &qu ...
- 学习SQLite基本语句
SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非 ...