Bzoj2007 [Noi2010]海拔(平面图最短路)
2007: [Noi2010]海拔
Time Limit: 20 Sec Memory Limit: 552 MB
Submit: 2742 Solved: 1318
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
2
3
4
5
6
7
8
Sample Output
【样例说明】
样例数据见下图。
最理想情况下所有点的海拔如上图所示。
对于100%的数据:1 ≤ n ≤ 500,0 ≤ 流量 ≤ 1,000,000且所有流量均为整数。
显然我们只需要考虑0和1的分界线在何处即可。当然我们需要找到一些边集,把图分成两半,且权值和最小。这不就是最小割吗...所以直接把原图转成对偶图,然后跑dijkstra。
注意连边的时候考虑方向,我们不妨假定对偶图边经过的方向,左边海拔为0,右边海拔为1,然后只要算0到1的,所以就是正方向的权值。所以我们只需要把方向相反的两条边在对偶图中也构出方向相反的即可。
这样就可以了。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#define N 507
using namespace std; int n;
int mp[N][N][];
int dis[N][N]; struct dist
{
int x,y,dis;
bool operator < (const dist b) const
{
return dis>b.dis;
}
};
priority_queue<dist>q;
int ans=1e9+;
void insert(int x,int y,int d)
{
if(d<dis[x][y])
{
dis[x][y]=d;
q.push((dist){x,y,d});
}
if(y==)ans=min(ans,d+mp[x][y][]);
if(x==n)ans=min(ans,d+mp[x+][y][]);
}
void Dij()
{
int i,j;
for(i=;i<=n;i++)
insert(,i,mp[][i][]);
for(j=;j<=n;j++)
insert(j,n,mp[j][n+][]);
while(!q.empty())
{
dist now=q.top();q.pop();
if(now.dis>dis[now.x][now.y])continue;
int x=now.x,y=now.y;
if(x>) insert(x-,y,now.dis+mp[now.x][now.y][]);
if(y>) insert(x,y-,now.dis+mp[now.x][now.y][]);
if(x<n) insert(x+,y,now.dis+mp[now.x+][now.y][]);
if(y<n) insert(x,y+,now.dis+mp[now.x][now.y+][]);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n+;i++)
for(int j=;j<=n;j++)
scanf("%d",&mp[i][j][]);//从西到东
for(int i=;i<=n;i++)
for(int j=;j<=n+;j++)
scanf("%d",&mp[i][j][]);//从北到南
for(int i=;i<=n+;i++)
for(int j=;j<=n;j++)
scanf("%d",&mp[i][j][]);//从东到西
for(int i=;i<=n;i++)
for(int j=;j<=n+;j++)
scanf("%d",&mp[i][j][]);//从南到北
memset(dis,0x3f,sizeof dis);
Dij();
cout<<ans<<endl;
}
Bzoj2007 [Noi2010]海拔(平面图最短路)的更多相关文章
- [BZOJ2007][NOI2010]海拔(对偶图最短路)
首先确定所有点的海拔非0即1,问题转化成裸的平面图最小割问题,进而转化成对偶图最短路(同BZOJ1002). 这题的边是有向的,所以所有边顺时针旋转90度即可. 如下图(S和T的位置是反的). #in ...
- BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割
题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
- 【BZOJ2007】[Noi2010]海拔 对偶图最短路
[BZOJ2007][Noi2010]海拔 Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看 ...
- BZOJ2007 [Noi2010]海拔 【平面图最小割转对偶图最短路】
题目链接 BZOJ2007 题解 这是裸题啊,,要是考试真的遇到就好了 明显是最小割,而且是有来回两个方向 那么原图所有向右的边转为对偶图向下的边 向左的边转为向上 向下转为向左 向上转为向右 然后跑 ...
- Luogu2046 NOI2010 海拔 平面图、最小割、最短路
传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...
- P2046 [NOI2010]海拔 平面图转对偶图(最小割-》最短路)
$ \color{#0066ff}{ 题目描述 }$ YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形. ...
- bzoj2007 NOI2010 海拔(对偶图)
80分(最小割)思路 先考虑如果没有题目中东南角为\(1\)那个限制的话会怎样. 那么只要让每个点的海拔都是\(0\)就行了.这样不论怎样走,最后的答案都是0. 然后再考虑那个东南角为\(1\)的限制 ...
- Bzoj2007 [Noi2010]海拔
Time Limit: 20 Sec Memory Limit: 552 MB Submit: 2380 Solved: 1130 Description YT市是一个规划良好的城市,城市被东西向 ...
随机推荐
- sql创建作业--自动执行存储过程
创建自动执行存储过程: 1.创建参数 2.删除已有同名的作业 3. 创建作业 4.创建作业步骤 5.连接服务器 6.创建作业调度 7.启动作业 ALTER PROCEDURE dbo.sx_pro_A ...
- COGS 2084. Asm.Def的基本算法
★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] “有句美国俗语说,如果走起来像鸭子,叫起来像 ...
- WPF知识点全攻略08- 依赖属性
依赖属性是WPF不得不提,不得不会系列又一 先来看一下,自定义依赖属性的写法 public static readonly DependencyProperty IconProperty = Depe ...
- WPF知识点全攻略06- WPF逻辑树(Logical Tree)和可视树(Visual Tree)
介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://sche ...
- C06 变量和存储类型
目录 全局变量 局部变量 存储类型 全局变量和局部变量 变量的作用域 作用域:某些事物起作用或有效的区域. 变量的使用范围称为变量的作用域. 变量的作用域决定了变量的可操作性和有效性. C语言变量的作 ...
- getpwuid和getpwnam的用法
如果知道一个用户的用户ID或者登录名,可以通过getpwuid或getpwnam函数获得用户的登录信息.函数原型为: #include <pwd.h> #include & ...
- Windows10+anaconda,python3.5, 安装glove-python
Windows10+anaconda,python3.5, 安装glove-python安装glove安装之前 Visual C++ 2015 Build Tools开始安装安装glove最近因为一个 ...
- ios之UILabel
详细使用: UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 75, 40)]; //声明UIlbel并指定其位置和长 ...
- Linux基础学习-Postfix与Dovecot部署邮件系统
电子邮件系统 电子邮件系统是我们在日常工作.生活中最常用的一种网络服务. 部署基础的电子邮件系统 [root@qdlinux ~]# yum install bind-chroot -y [root@ ...
- NFS基础优化
一.环境 环境接上篇 https://www.cnblogs.com/suffergtf/p/9486250.html 二.参数详解 1.nfsserver端配置参数详解 [root@nfsserve ...