传送门

BZOJdown

Solution

比较妙,考虑按照给出的式子,只有\(x\)相邻或者\(y\)相邻的才会走,不然一定会走到相邻的再走\(x\)或\(y\),所以直接排序两边然后最短路即可。

Code

  1. /*
  2. mail: mleautomaton@foxmail.com
  3. author: MLEAutoMaton
  4. This Code is made by MLEAutoMaton
  5. */
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. #include<math.h>
  10. #include<algorithm>
  11. #include<queue>
  12. #include<set>
  13. #include<map>
  14. #include<iostream>
  15. using namespace std;
  16. #define ll long long
  17. #define REP(a,b,c) for(int a=b;a<=c;a++)
  18. #define re register
  19. #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
  20. inline int gi(){
  21. int f=1,sum=0;char ch=getchar();
  22. while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  23. while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
  24. return f*sum;
  25. }
  26. const int N=400010;
  27. struct point{
  28. int x,y,id;
  29. }p[N];
  30. int n,front[N],cnt;
  31. struct node{
  32. int to,nxt,w;
  33. }e[N<<1];
  34. void Add(int u,int v,int w){e[++cnt]=(node){v,front[u],w};front[u]=cnt;}
  35. bool cmpx(point a,point b){return a.x<b.x;}
  36. bool cmpy(point a,point b){return a.y<b.y;}
  37. typedef pair<int,int> pii;
  38. #define mp make_pair
  39. priority_queue<pii,vector<pii>,greater<pii> >q;
  40. int dis[N],vis[N];
  41. void dijkstra(){
  42. memset(dis,63,sizeof(dis));dis[1]=0;q.push({0,1});
  43. while(!q.empty()){
  44. int u=q.top().second;q.pop();
  45. if(vis[u])continue;vis[u]=1;
  46. for(int i=front[u];i;i=e[i].nxt){
  47. int v=e[i].to;
  48. if(dis[v]>dis[u]+e[i].w){
  49. dis[v]=dis[u]+e[i].w;q.push({dis[v],v});
  50. }
  51. }
  52. }
  53. }
  54. int main(){
  55. n=gi();
  56. for(int i=1;i<=n;i++)p[i].x=gi(),p[i].y=gi(),p[i].id=i;
  57. sort(p+1,p+n+1,cmpx);
  58. for(int i=2;i<=n;i++){
  59. Add(p[i].id,p[i-1].id,abs(p[i].x-p[i-1].x));
  60. Add(p[i-1].id,p[i].id,abs(p[i].x-p[i-1].x));
  61. }
  62. sort(p+1,p+n+1,cmpy);
  63. for(int i=2;i<=n;i++){
  64. Add(p[i].id,p[i-1].id,abs(p[i].y-p[i-1].y));
  65. Add(p[i-1].id,p[i].id,abs(p[i].y-p[i-1].y));
  66. }
  67. dijkstra();printf("%d\n",dis[n]);
  68. return 0;
  69. }

AMPPZ2014 The Captain的更多相关文章

  1. 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain

    循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...

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

    先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra ---------------------------------------------- ...

  3. bzoj4152[AMPPZ2014]The Captain 最短路

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1517  Solved: 603[Submi ...

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

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2107  Solved: 820[Submi ...

  5. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*

    BZOJ4152 AMPPZ2014 The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点 ...

  6. 【BZOJ4152】[AMPPZ2014]The Captain 最短路

    [BZOJ4152][AMPPZ2014]The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1 ...

  7. 4152: [AMPPZ2014]The Captain

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1561  Solved: 620[Submi ...

  8. bzoj 4152[AMPPZ2014]The Captain

    bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. ...

  9. bzoj4152 [AMPPZ2014]The Captain

    最短路,先将x排序,然后把排序后权值相邻的点连边,再把y排序,也把权值相邻的点连边,求一遍1到n的最短路就好啦. 代码 #include<cstdio> #include<queue ...

  10. BZOJ4152:[AMPPZ2014]The Captain——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4152 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1 ...

随机推荐

  1. swiper4基础

    这段时间在公司实习做前端,感觉前端没学习到很多前端框架,接口那些都是写好的,只需要调用就好,感觉没什么好记的,唯一觉得有必要记的就是swiper轮播了,在前端做网站的时候经常用到swiper做公告,图 ...

  2. Python基础6

    <零基础入门学习python>,小甲鱼. P33. 用for循环和range() 配合求数列和,对比while循环,简洁很多

  3. 【转载】C#通过Contains方法判断DataTable中是否存在某个列名

    在C#中的Datatable数据变量的操作过程中,有时候需要判断DataTable中是否存在某个列名,此时可以通过DataTable对象的Columns列对象集合属性下的Contains方法来进行判断 ...

  4. mysql分析sql语句基础工具 -- explain

    分析sql语句 explain explain (sql语句) G; 分析结果: id sql语句编号如果是连接查询,表之间是平等关系,编号相同:如果有子查询,编号递增. select——type 查 ...

  5. iView学习笔记(二):Table行编辑操作

    1.前端准备工作 首先新建一个项目,然后引入iView插件,配置好router npm安装iView npm install iview --save cnpm install iview --sav ...

  6. dfs 之 下一个排列

    52. 下一个排列 中文English 给定一个整数数组来表示排列,找出其之后的一个排列. Example 例1: 输入:[1] 输出:[1] 例2: 输入:[1,3,2,3] 输出:[1,3,3,2 ...

  7. Appium中wait_activity的使用以及XPATH定位

    # -*- coding:utf-8 -*- from appium import webdriver from time import sleep desired_caps ={ 'platform ...

  8. 用JAVA实现找出输入字符串中的出现次数最多的字符及其次数;

    //通过Map 类实现,通过键值对的方式,可以将输入的字符串的每一个字符,作为键,每个字符出现的次数作为值:如下: public class Find { public static void mai ...

  9. GhostScript命令参数详解(转)

    http://blog.csdn.net/catoop/article/details/42737441 本文列出几个常用参数,然后下面附上官方的参数详解: 一.常用参数解释 这是一个测试的命令:gs ...

  10. Invalid bound statement (not found): com.taotao.mapper.TbItemMapper.selectByPrimaryKey

    Invalid bound statement (not found): com.taotao.mapper.TbItemMapper.selectByPrimaryKey Invalid bound ...