Description

给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。

Input

第一行包含一个正整数n(2<=n<=200000),表示点数。
接下来n行,每行包含两个整数x[i],yi,依次表示每个点的坐标。

Output

一个整数,即最小费用。

Sample Input

5

2 2

1 1

4 5

7 1

6 7

Sample Output

2

Solution

定义 \(d_{i,j} = min(x_i - x_j, y_i - y_j)\).

当 \(x_i <= x_j <= x_k\), 发现 \(d_{i,k} >= d_{i,j} + d_{j,k}\). \(y\) 同理.

因此, 将x轴排序, 将x坐标相邻的点相连, y轴同理. 求1到n最短路即可.

Code

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define rep(i,l,r) for(register int i=(l);i<=(r);++i)
#define repdo(i,l,r) for(register int i=(l);i>=(r);--i)
#define il inline
typedef double db;
typedef long long ll;//---------------------------------------
const int nsz=2e5+50;
const ll ninf=1e17;int n;
struct tp{int p,x,y;}line[nsz];
bool cmp1(tp a,tp b){return a.x<b.x;}
bool cmp2(tp a,tp b){return a.y<b.y;}
int dis(int a,int b){return min(abs(line[a].x-line[b].x),abs(line[a].y-line[b].y));}struct te{int t,v,pr;}edge[nsz*4];
int hd[nsz],pe=1;
void adde(int f,int t,int v){edge[++pe]=(te){t,v,hd[f]};hd[f]=pe;}
void adddb(int f,int t,int v){adde(f,t,v);adde(t,f,v);}ll mind[nsz],vi[nsz];
struct tnd{ll v,d;};
bool operator<(tnd a,tnd b){return a.d>b.d;}
void dij(int f){priority_queue<tnd> pq;rep(i,1,n)mind[i]=ninf,vi[i]=0;mind[f]=0,pq.push((tnd){f,0});int u,d2;while(!pq.empty()){u=pq.top().v;pq.pop();if(vi[u])continue;vi[u]=1;for(int i=hd[u],v;i;i=edge[i].pr){v=edge[i].t,d2=mind[u]+edge[i].v;if(mind[v]>d2){mind[v]=d2;pq.push((tnd){v,mind[v]});}}}
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n;rep(i,1,n)cin>>line[i].x>>line[i].y,line[i].p=i;sort(line+1,line+n+1,cmp1);rep(i,1,n-1)adddb(line[i].p,line[i+1].p,dis(i,i+1));sort(line+1,line+n+1,cmp2);rep(i,1,n-1)adddb(line[i].p,line[i+1].p,dis(i,i+1));dij(1);cout<<mind[n]<<'\n';return 0;
}

转载于:https://www.cnblogs.com/ubospica/p/10237579.html

bzoj4152-[AMPPZ2014]The_Captain相关推荐

  1. BZOJ4152 AMPPZ2014 The Captain(最短路)

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

  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. 2019.4.summary

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

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

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

  6. 【BZOJ】【4145】【AMPPZ2014】The Prices

    状压DP/01背包 Orz Gromah 容易发现m的范围很小--只有16,那么就可以状压,用一个二进制数来表示买了的物品的集合. 一种简单直接的想法是:令$f[i][j]$表示前$i$个商店买了状态 ...

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

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

  8. BZOJ 4143: [AMPPZ2014]The Lawyer( sort )

    水题... 排序搞出每天的会议有哪些, 然后再按照会议的开始时间和结束时间排序, 最晚开始的和最早结束的会议不是同一场而且最晚开始的时间>最早结束的会议就有可能方案 -------------- ...

  9. Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)

    4147: [AMPPZ2014]Euclidean Nim Time Limit: 1 Sec Memory Limit: 256 MB Description Euclid和Pythagoras在 ...

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

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

最新文章

  1. 2-RACommand
  2. 基于计算机视觉的构件表面缺陷特征提取
  3. (二)、MariaDB、Apache软件安装
  4. mysql++月份排序_Mysql 按月份为组进行统计排序_MySQL
  5. 【信号发生器】基于quartusii的信号发生器的设计
  6. STM32 不断进入串口中断问题 解决方法
  7. VueX的store的简单使用心结
  8. source code of MES Data
  9. python禁用警告
  10. c语言无法打开源文件stdafx.h,VS2013/2012/2010 下无法打开 源 文件“stdafx.h”的解决方法...
  11. Report Machine 的问题 补充!!!
  12. C# 给PowerPoint文档设置背景颜色和背景图片
  13. 通达信最新 行情服务器,通达信数据接收服务器地址及端口号
  14. 容器云技术docker
  15. 数据结构(数组结构、链表结构)
  16. 四面阿里Java高级研发岗,定级P7:数据结构+分布式+JVM+线程
  17. Vue 中 qrcode.vue 生成二维码以及添加中心logo
  18. 他是“中国第一程序员”,一人之力单挑微软!
  19. RP-VIO:面向动态环境的基于平面的鲁棒视惯融合里程计(IROS2021)
  20. 《第一堂棒球课》:职业棒球

热门文章

  1. BugkuCTF-MISC题cisco(writeup)
  2. java annotation list_java-注解annotation
  3. 将字符转换成数字(atoi),将数字转换成字符(itoa)
  4. java中asl_带你认识绕不开的ASLR
  5. 【Leetcode819】最常见的单词
  6. python随机数据随概率分布_概率分布及其Python实现
  7. java mysubmail_关于MyBatis10种超好用的写法(收藏)
  8. java 声明抽象方法_java – 类必须声明为abstract或实现抽象方法错误
  9. matlab中的 variable,matlab中的问题Missing variable or function
  10. a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)