【bzoj4152】[AMPPZ2014]The Captain 堆优化Dijkstra
题目描述
输入
输出
样例输入
5
2 2
1 1
4 5
7 1
6 7
样例输出
2
题解
最短路神题
这种题貌似不需要放思考过程?
发现$|x_1-x_2|$类型的边只有横坐标相邻的点之间有必要连,其余的都可以由这些边表示,因此按横坐标排序,相邻的点连边。纵坐标同理。
然后直接跑堆优化Dijkstra即可。
时间复杂度$O(n\log n)$
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
using namespace std;
typedef pair<int , int> pr;
struct data
{
int x , y , id;
}a[N];
priority_queue<pr> q;
int head[N] , to[N << 2] , len[N << 2] , next[N << 2] , cnt , dis[N] , vis[N];
bool cmpx(data a , data b)
{
return a.x < b.x;
}
bool cmpy(data a , data b)
{
return a.y < b.y;
}
inline void add(int x , int y , int z)
{
to[++cnt] = y , len[cnt] = z , next[cnt] = head[x] , head[x] = cnt;
to[++cnt] = x , len[cnt] = z , next[cnt] = head[y] , head[y] = cnt;
}
int main()
{
int n , i , x;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d%d" , &a[i].x , &a[i].y) , a[i].id = i;
sort(a + 1 , a + n + 1 , cmpx);
for(i = 1 ; i < n ; i ++ ) add(a[i].id , a[i + 1].id , a[i + 1].x - a[i].x);
sort(a + 1 , a + n + 1 , cmpy);
for(i = 1 ; i < n ; i ++ ) add(a[i].id , a[i + 1].id , a[i + 1].y - a[i].y);
memset(dis , 0x3f , sizeof(dis)) , dis[1] = 0 , q.push(pr(0 , 1));
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(pr(-dis[to[i]] , to[i]));
}
printf("%d\n" , dis[n]);
return 0;
}
【bzoj4152】[AMPPZ2014]The Captain 堆优化Dijkstra的更多相关文章
- BZOJ 3040 最短路 (堆优化dijkstra)
		
这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...
 - UVA - 11374 - Airport Express(堆优化Dijkstra)
		
Problem UVA - 11374 - Airport Express Time Limit: 1000 mSec Problem Description In a small city c ...
 - BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra
		
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海 ...
 - 配对堆优化Dijkstra算法小记
		
关于配对堆的一些小姿势: 1.配对堆是一颗多叉树. 2.包含优先队列的所有功能,可用于优化Dijkstra算法. 3.属于可并堆,因此对于集合合并维护最值的问题很实用. 4.速度快于一般的堆结构(左偏 ...
 - POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]
		
题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...
 - 【堆优化Dijkstra+字典序最短路方案】HDU1385-Minimum Transport Cost
		
[题目大意] 给出邻接矩阵以及到达各个点需要付出的代价(起点和终点没有代价),求出从给定起点到终点的最短路,并输出字典序最小的方案. [思路] 在堆优化Dijkstra中,用pre记录前驱.如果新方案 ...
 - 【bzoj5197】[CERC2017]Gambling Guide  期望dp+堆优化Dijkstra
		
题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...
 - 堆优化Dijkstra计算最短路+路径计数
		
今天考试的时候遇到了一道题需要路径计数,然而蒟蒻从来没有做过,所以在考场上真的一脸懵逼.然后出题人NaVi_Awson说明天考试还会卡SPFA,吓得我赶紧又来学一波堆优化的Dijkstra(之前只会S ...
 - BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
		
BZOJ4152 AMPPZ2014 The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点 ...
 
随机推荐
- 【原创】os.chdir设置的工作路径和sys.path之间到底是个啥关系?
			
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9390455.html 直接放上测试后的结论(测试代码和截图过多,有兴趣的小伙伴可自己测试,未来看情况 ...
 - jdbc学习笔记02
			
数据库连接池 DBCP DataBase Conection Pool:数据库连接池 如果没有数据库连接池,每一次业务都需要服务器和数据库服务器建立一次连接,业务处理完连接断开,如果有1万次业务处理, ...
 - JavaScript Shell学习分享
			
目录 JavaScript Shell学习分享 简介 安装 使用原因 小结 JavaScript Shell学习分享 简介 JavaScript Shell是由Mozilla提供的综合JavaScri ...
 - Java线程:概念与使用
			
Java线程大总结 原文章地址:一篇很老的专栏,但是现在看起来也感觉深受启发,知识点很多,很多线程特点我没有看,尴尬.但是还是整理了一下排版,转载一下. 操作系统中线程和进程的概念 在现代操作系统中, ...
 - Android开发——View绘制过程源码解析(二)
			
0. 前言 View的绘制流程从ViewRoot的performTraversals开始,经过measure,layout,draw三个流程,之后就可以在屏幕上看到View了.上一篇已经介绍了Vi ...
 - android去掉button默认的点击阴影
			
查了资料,发现别人都是说加一个style属性. style="?android:attr/borderlessButtonStyle" 加上了确实管用,但是我绝不是不求甚解的人.追 ...
 - Mysql双主操作
			
MySQL双主(主主)架构方案 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果 ...
 - leetcode笔记--2 reverse string
			
my answer: 出错点:new_list[s] = list_s[u-1-s] 这样会出错, 重点:(1) map(str, s) 函数的使用,例:ls = [1,2,3]rs = map(st ...
 - iOS笔记058 - IOS之多线程
			
IOS开发中多线程 主线程 一个iOS程序运行后,默认会开启1条线程,称为"主线程"或"UI线程" 作用 显示和刷新界面 处理UI事件(点击.滚动.拖拽等) 注 ...
 - final static 修饰(转载)
			
static修饰符 static修饰符能够与属性.方法和内部类一起使用,表示静态的.类中的静态变量和静态方法能够与类名一起使用,不需要创建一个类的对象来访问该类的静态成员,所以,stat ...