事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案。于是这样连边跑最短路就可以了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 200010
int n,p[N],d[N],t=0;
bool flag[N];
struct point{int x,y,i;
}a[N];
struct data{int to,nxt,len;
}edge[N<<2];
struct data2
{int x,d;bool operator <(const data2&a) const{return d>a.d;}
};
priority_queue<data2> q;
void addedge(int x,int y,int z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
void dijkstra()
{while (!q.empty()) q.pop();for (int i=2;i<=n;i++) d[i]=1000000001;q.push((data2){1,0});memset(flag,0,sizeof(flag));for (int i=1;i<=n;i++){while (!q.empty()&&flag[q.top().x]) q.pop();if (q.empty()) break;data2 v=q.top();q.pop();flag[v.x]=1;for (int j=p[v.x];j;j=edge[j].nxt)if (v.d+edge[j].len<d[edge[j].to]){d[edge[j].to]=v.d+edge[j].len;q.push((data2){edge[j].to,d[edge[j].to]});}}
}
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;
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj4152.in","r",stdin);freopen("bzoj4152.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read();for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read(),a[i].i=i;sort(a+1,a+n+1,cmp1);for (int i=1;i<n;i++)addedge(a[i].i,a[i+1].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y))),addedge(a[i+1].i,a[i].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y)));sort(a+1,a+n+1,cmp2);for (int i=1;i<n;i++)addedge(a[i].i,a[i+1].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y))),addedge(a[i+1].i,a[i].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y)));dijkstra();cout<<d[n];return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/9827815.html

BZOJ4152 AMPPZ2014 The Captain(最短路)相关推荐

  1. BZOJ 4152: [AMPPZ2014]The Captain(最短路)

    Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1550  Solved: 619 [Submit][Status][Discuss] Descrip ...

  2. bzoj4152: [AMPPZ2014]The Captain

    水... 这个建边排序一下从一边连向一边 dij在这种稀疏图果然不够优秀啊.只是学了一发. #include<cstdio> #include<iostream> #inclu ...

  3. bzoj4152 [AMPPZ2014]The Captain

    Description 给定平面上的 \(n\) 个点,定义 \((x_1,y_1)\) 到 \((x_2,y_2)\) 的费用为 \(\min(|x_1-x_2|,|y_1-y_2|)\) ,求从 ...

  4. 4152. [AMPPZ2014]The Captain(稠密图最短路)

    4152. [AMPPZ2014]The Captain 显然稠密图的边数时n2n^2n2量级,我们不可能把所有边建立出来,这时候通常寻求一些性质详细见[论题选编]稠密图最短路 针对本题我们可以先这样 ...

  5. 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 2107  Solved: 820 [Sub ...

  6. bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集

    bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集 1.这道题我们主要就是要求出距离一个油站的最近的油站 首先我们dijkstra 求出任意一个点到 离他最近的油站的距离 2. ...

  7. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  8. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  9. python画热力图_Python中绘制场景热力图

    原博文 2019-08-06 15:39 − 我们在做诸如人群密集度等可视化的时候,可能会考虑使用热力图,在Python中能很方便地绘制热力图. 下面以识别图片中的行人,并绘制热力图为例进行讲解. 步 ...

最新文章

  1. 如何运用NLP向个性类型客户介绍产品
  2. 基础总结(04)-- display:none;visibility:hidden;区别
  3. springMVC文件下载
  4. JS中三目运算符和if else的区别
  5. 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。
  6. IO多路复用的三种机制Select,Poll,Epoll
  7. oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接
  8. WordPress主题制作常用代码集合
  9. python怎么运行丘比特之箭_test
  10. HashSet vs TreeSet vs LinkedHashSet
  11. java元组_Java元组Tuple介绍与使用
  12. svn\pristine\0a\0a66a6f1e12c54c3a0c3885a2bf5042977071358.svn-base系统找不到指定路径
  13. STM32CubeMX使用(三)之DMA使用SPI
  14. [转]有关TinyXML使用的简单总结
  15. 学校实训密码锁设计(基于STC51单片机)报告
  16. lwj_C#_集合stack栈和queue队列
  17. 基于ROS的A*算法代码学习
  18. 较全的正则字符、规则汇总
  19. 【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵
  20. Contrastive Loss

热门文章

  1. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用
  2. 如何在本地访问远程服务器的jupyter notebook?
  3. 【读书笔记】知易行难,多实践
  4. SMOTE算法代码实现-机器学习
  5. np.percentile()函数超详解 异常值极端值百分位四分位数
  6. LeetCode简单题之只出现一次的数字
  7. 浅析Spring——控制反转IoC
  8. GStreamer跨平台多媒体框架
  9. CUDA刷新:GPU计算生态系统
  10. 2021年大数据ELK(二):Elasticsearch简单介绍