【bzoj4152】【AMPPZ2014】【The Captain】【最短路】
来源:互联网 发布:网络运营 专业技能 编辑:程序博客网 时间:2024/05/17 07:07
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
2 2
1 1
4 5
7 1
6 7
Sample Output
2
题解:
把每个点先按横坐标排序,相邻点连边。
再把每个点按纵坐标排序,相邻点连边。
然后跑最短路即可。
代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define N 200005#define zff pair<long long,int>using namespace std;struct use{int x,y,kind;}p[N];struct use2{int st,en;long long v;}e[N*4];priority_queue<zff,vector<zff>,greater<zff> >q;int point[N],next[N*4],cnt,n,x,y;long long dis[N];bool f[N];bool cmp(use a,use b){return a.x<b.x;}bool cmp2(use a,use b){return a.y<b.y;}void add(int x,int y,int v){ next[++cnt]=point[x];point[x]=cnt; e[cnt].st=x;e[cnt].en=y;e[cnt].v=(long long)v;}void spfa() { memset(f,0,sizeof(f)); memset(dis,127,sizeof(dis)); dis[1]=0;q.push(make_pair(0,1)); while (!q.empty()) { int x=q.top().second;q.pop(); if (f[x]) continue;f[x]=1; for (int i=point[x];i;i=next[i]) if (dis[e[i].en]>dis[x]+e[i].v) { dis[e[i].en]=dis[x]+e[i].v; q.push(make_pair(dis[e[i].en],e[i].en)); } } } int main(){ scanf("%d",&n); for (int i=1;i<=n;i++){scanf("%d%d",&x,&y);p[i].x=x;p[i].y=y;p[i].kind=i;} sort(p+1,p+n+1,cmp); for (int i=1;i<n;i++){ add(p[i].kind,p[i+1].kind,p[i+1].x-p[i].x); add(p[i+1].kind,p[i].kind,p[i+1].x-p[i].x); } sort(p+1,p+n+1,cmp2); for (int i=1;i<n;i++){ add(p[i].kind,p[i+1].kind,p[i+1].y-p[i].y); add(p[i+1].kind,p[i].kind,p[i+1].y-p[i].y); } spfa(); cout<<dis[n]<<endl; }
0 0
- 【bzoj4152】【AMPPZ2014】【The Captain】【最短路】
- 【bzoj4152: [AMPPZ2014]The Captain】最短路
- 【bzoj4152】[AMPPZ2014]The Captain
- 【AMPPZ2014】【BZOJ4152】The Captain
- 【bzoj4152】【AMPPZ2014】The Captain
- bzoj4152 [AMPPZ2014]The Captain
- [bzoj4152][AMPPZ2014]The Captain dijkstra
- 【BZOJ4152】【最短路】The Captain 题解
- 【bzoj4152】 AMPPZ2014The Captain 最短路
- BZOJ 4152 [AMPPZ2014]The Captain 最短路题解
- BZOJ 4152: [AMPPZ2014]The Captain 分层图最短路
- [BZOJ4152][AMPPZ2014]The Captain(堆优化dijkstra)
- 【bzoj4152】【The Captain】最短路(堆优化)(浅尝ACM-B)
- [BZOJ4152]The Captain
- 4152: [AMPPZ2014]The Captain
- 4152: [AMPPZ2014]The Captain
- 4152: [AMPPZ2014]The Captain
- BZOJ 4152: [AMPPZ2014]The Captain
- 小波函数
- Oracle常用的数据操作函数
- 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02
- Copy List with Random Pointer
- c++ primer第五版(中文)习题答案 第二章第三节-复合类型
- 【bzoj4152】【AMPPZ2014】【The Captain】【最短路】
- 【黑马程序员】栈内存与堆内存
- CheungSSH运维自动化软件 批量管理上千台服务器 堡垒机
- Unity3D 提高视频movie视频播放的质量
- 在使用startActivityForResult时需要注意的问题
- CF542D
- hdoj 2529 Shot 【物理题】&&【物理题好无力】
- 时间和日期选择器DatePicker和TimePicker的使用
- 手机当前屏幕内容分享核心代码