BZOJ 4152 浅谈堆优化的SPFA算法
世界真的很大
其实这道题一看就能想到最短路
关键是怎么建边
看一下数据,200000个点
每个点两两建边的话肯定会超时
好像说多了先看一下题吧:
description
给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。
input
第一行包含一个正整数n(2<=n<=200000),表示点数。
接下来n行,每行包含两个整数x[i],y[i](0<=x[i],y[i]<=10^9),依次表示每个点的坐标。
output
一个整数,即最小费用。
首先是最短路没错了
关键是考虑一下怎么建边
认真看一下题
对每一个点来说,想要到它无非两种方法,通过x或y。换个角度想,从一个点到任意另一个点,直接通过距离的费用肯定大于等于通过x或y相邻的点搭桥过去
因为直接过去是直接x坐标或y坐标的距离,但是间接过去是去中间的点的x,y距离的较小值相加。
所以每个点和多余的点建边其实没什么意义,只用和与自己在x,y相邻的点建边就行了。
那么排个序,挨个建边,跑最短路,KO
还有一个坑点,这道题卡SPFA
SPFA对于稠密图效率很低,不如dijkstra
但是它真的能逼我去写dijkstra吗???
答案是否定的
dijkstra可以堆优化,spfa一样可以。其实说是堆,我大概也不会真的手写堆吧。。。
STL里有一个优先队列priority_queue非常好用,作为一个队列可以logn维护队列有序,经常被当做堆使用。
大根堆的话直接用就行,小根堆的话就需要加一个:
priority_queue<int,vector<int>,greater<int> > xiao;
详细的话就看完整代码吧:
#include<stdio.h>
#include<cstring>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
typedef long long dnt;
struct point
{int x,y,idx;
}pt[1000010];struct edge
{int last,v,w;
}ed[1000010];int num=0,n;
int se[500010],head[500010];
dnt dis[500010],INF=1e14+7LL;
priority_queue < pair<dnt,int> ,vector< pair<dnt,int> > ,greater<pair<dnt,int> > > state;bool cmp1(const point &a,const point &b)
{return a.x<b.x;
}bool cmp2(const point &a,const point &b)
{return a.y<b.y;
}bool cmp3(const point &a,const point &b)
{return a.idx<b.idx;
}void add(int u,int v,int w)
{num++;ed[num].v=v;ed[num].w=w;ed[num].last=head[u];head[u]=num;
}void spfa()
{for(int i=1;i<=n;i++) dis[i]=INF;state.push(make_pair(0,1));se[1]=1,dis[1]=0;while(!state.empty()){int u=state.top().second;state.pop();se[u]=0;for(int i=head[u];i;i=ed[i].last){int v=ed[i].v;if(dis[v]>dis[u]+ed[i].w){dis[v]=dis[u]+ed[i].w;if(!se[v]){se[v]=1;state.push(make_pair(dis[v],v));}}}}
}int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&pt[i].x,&pt[i].y);pt[i].idx=i;}sort(pt+1,pt+n+1,cmp1);for(int i=1;i<n;i++){add(pt[i].idx,pt[i+1].idx,pt[i+1].x-pt[i].x);add(pt[i+1].idx,pt[i].idx,pt[i+1].x-pt[i].x);}sort(pt+1,pt+n+1,cmp2);for(int i=1;i<n;i++){add(pt[i].idx,pt[i+1].idx,pt[i+1].y-pt[i].y);add(pt[i+1].idx,pt[i].idx,pt[i+1].y-pt[i].y);}spfa();printf("%lld",dis[n]);return 0;
}
嗯,就是这样
BZOJ 4152 浅谈堆优化的SPFA算法相关推荐
- 浅谈凸优化中的共轭函数
浅谈凸优化中的共轭函数 函数ff的共轭定义: f∗(y)=sup(yTx−f(x))f^*(y) = \sup (y^Tx - f(x)), x∈domf{x\in {\bf dom} f} 可见,共 ...
- 浅谈数据库优化方面的经验
浅谈数据库优化方面的经验 任何系统.网站几乎都离不开数据库,数据库好比人大脑的记忆系统,没有了数据库就没有了记忆系统.而数据库优化则相当于在同等智力的情况下,利用一种高效率地记忆方法进行更快更优的记忆 ...
- 浅谈性能优化之图片压缩、加载和格式选择
原文链接:浅谈性能优化之图片压缩.加载和格式选择 在认识图片优化前,我们先了解下 [二进制位数]与[色彩呈现]的关系. 二进制位数与色彩 在计算机中,一般用二进制数来表示像素.在不同的图片格式中,像素 ...
- 浅谈淘宝搜索排序算法【转自淘宝搜索博客】
浅谈淘宝搜索排序算法 作者:鬼脚七 前言: 目前网上有很多介绍淘宝搜索排序的文章,大多是淘宝卖家们根据自己经验摸索整理出来的,里面提到的很多办法也很正确.只是搜索排序算法不是固定 ...
- 浅谈网络爬虫中广度优先算法和代码实现
前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...
- 面试浅谈之十大排序算法
面试浅谈之十大排序算法 HELLO,各位博友好,我是阿呆
- 浅谈tomcat优化
前言 对于JavaWeb开发人员而言,Tomcat已成为默认的web服务器,但是在生产环境下使用Tomcat部署应用,我们如果采用Tomcat默认的配置,尤其是内存和线程的配置,其配置都很低,容易成为 ...
- 浅谈性能优化有哪些指标
本篇博客主要是从理论角度浅谈一下一些可以性能优化的点,也算是我的学习整理. 首先就是我们一般对于复杂事物在不直观的情况下,我们往往会去计算统计某些指标来进行来作为衡量决策的参考.这个都是比较好理解的, ...
- 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II
堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...
最新文章
- 什么是SOLID原则(第3部分)
- 科普丨深度学习硬件(GPU、FPGA、ASIC、DSP)
- native2ascii用法
- 推荐一本DD刚撸完的书,顺便送一波!
- IE7不能显示PNG
- springboot整合shiro-关于登出时,redis中缓存没有清理干净的问题
- 4.5.1 条件语句
- html期末主题作业,tm.html
- 程序员都会的 35 个 jQuery 小技巧
- 15个示例让你搞懂Linux中的cd命令
- linux进入超级管理员权限,一直处于超级管理员权限下
- 还在担心快应用没流量?全场景新玩法来袭!
- android 获取网卡mac_android 获取MAC地址
- PHP7-MySQLi在分页中的应用
- basis问题专区(文档)
- cnn初学者—从这入门_使用Tensorflow为初学者使用CNN进行简单图像分类
- oracel vm 安装windows server 2012报错Error 0x000000C4
- IIS配置ipa下载设置
- 计算机主机cpu图片,秒懂台式电脑处理器性能 桌面处理器天梯图2017年9月最新版...
- 华为鲲鹏云主机编译安装MySQL 8.0.17
热门文章
- .Net C/S系统开发框架(楚楚原创)
- ges resource dynamic 和 ges enqueues较高导致数据库宕机
- 二进制转十进制在c51单片机中的问题
- x390yoga 关掉触控屏幕_本站首晒:顶风作案的ThinkPad X390 yoga简单开箱
- 影响钕铁硼性能的因素及方法
- 亚马逊云服务器aws配置ssl https证书
- 电商项目——优惠券测试点有哪些?
- iOS进度条 自定义圆角 UIProgressView
- 一般配置的服务器租用一个月多少钱?服务器能买断嘛?
- 论文精读《LSS: Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting》