博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj4152[AMPPZ2014]The Captain 最短路
阅读量:5315 次
发布时间:2019-06-14

本文共 1431 字,大约阅读时间需要 4 分钟。

4152: [AMPPZ2014]The Captain

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 1517  Solved: 603
[][][]

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

一个整数,即最小费用。

 

Sample Input

5
2 2
1 1
4 5
7 1
6 7

Sample Output

2

HINT

 

Source

 

按横坐标排序,相邻点建边

按纵坐标排序,相邻点建边
dijkstra可过

1 #include
2 #define ll long long 3 #define mp make_pair 4 #define N 200005 5 using namespace std; 6 typedef pair
pii; 7 int n,tot,vis[N],hd[N],d[N]; 8 struct P{
int x,y,id;}a[N]; 9 struct edge{
int v,w,next;}e[N*10];10 bool cmp1(P a,P b){
return a.x
,greater
>q;20 void dijkstra(){21 for(int i=1;i<=n;i++)d[i]=1<<30;22 d[1]=0;q.push(mp(0,1));23 while(!q.empty()){24 pii x=q.top();q.pop();25 int u=x.second;26 if(vis[u])continue;vis[u]=1;27 for(int i=hd[u];i;i=e[i].next){28 int v=e[i].v;29 if(vis[v])continue;30 if(d[v]>d[u]+e[i].w){31 d[v]=d[u]+e[i].w;32 q.push(mp(d[v],v));33 }34 }35 }36 }37 38 int main(){39 scanf("%d",&n);40 for(int i=1;i<=n;a[i].id=i,i++)41 scanf("%d%d",&a[i].x,&a[i].y);42 sort(a+1,a+1+n,cmp1); 43 for(int i=1;i

 

转载于:https://www.cnblogs.com/wsy01/p/8366443.html

你可能感兴趣的文章
了解WP的传感器
查看>>
阅读笔记 火球——UML大战需求分析 2
查看>>
acedEvaluateLisp函数的反汇编
查看>>
Linux无线工具详解(Wireless tools for Linux)
查看>>
ACM PKU 2328 http://acm.pku.cn/JudgeOnline/problem?id=2328
查看>>
VB.NET 制作DLL动态库文件
查看>>
RSS阅读器
查看>>
Java语言基础——数据类型
查看>>
微信电脑版不断崩溃
查看>>
js链式调用
查看>>
The connection to adb is down, and a severe error has occured
查看>>
牛腩新闻系统(二)——原型图、数据库文档
查看>>
数字统计
查看>>
asp.net 文件操作小例子(创建文件夹,读,写,删)
查看>>
20180620小测
查看>>
7年,OpenStack从入门到放弃|送书
查看>>
部署mariadb高可用
查看>>
iptables设置规则
查看>>
聊聊setTimeout和setInterval线程
查看>>
计算机经典书箱
查看>>