最短路,先将x排序,然后把排序后权值相邻的点连边,再把y排序,也把权值相邻的点连边,求一遍1到n的最短路就好啦。

  代码

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. #define mp make_pair
  5. #define fi first
  6. #define sc second
  7. #define N 1000000
  8. using namespace std;
  9. typedef long long ll;
  10. typedef pair<int,int> P;
  11. int n,i,dp,p[N],pre[N],tt[N],ww[N],flag[N];
  12. int dis[N];
  13. priority_queue<P,vector<P>,greater<P> > Q;
  14. struct g{
  15. int a,b,id;
  16. }v[N];
  17. bool cmp1(g u,g v)
  18. {
  19. return u.a<v.a;
  20. }
  21. bool cmp2(g u,g v)
  22. {
  23. return u.b<v.b;
  24. }
  25.  
  26. void link(int x,int y,int z)
  27. {
  28. dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y;ww[dp]=z;
  29. }
  30. long long ans,f[N],sum[N];
  31. int main()
  32. {
  33. scanf("%d",&n);
  34. for (i=;i<=n;i++)
  35. scanf("%d%d",&v[i].a,&v[i].b),v[i].id=i;
  36. sort(v+,v++n,cmp1);
  37. for (i=;i<n;i++)
  38. {
  39. link(v[i].id,v[i+].id,abs(v[i].a-v[i+].a));
  40. link(v[i+].id,v[i].id,abs(v[i].a-v[i+].a));
  41. }
  42. sort(v+,v++n,cmp2);
  43. for (i=;i<n;i++)
  44. {
  45. link(v[i].id,v[i+].id,abs(v[i].b-v[i+].b));
  46. link(v[i+].id,v[i].id,abs(v[i].b-v[i+].b));
  47. }
  48. int inf=;
  49. for (i=;i<=n;i++) dis[i]=inf;
  50. Q.push(mp(,));
  51.  
  52. while (!Q.empty())
  53. {
  54. P x=Q.top();Q.pop();
  55. if (x.fi!=dis[x.sc]) continue;
  56. i=p[x.sc];
  57. while (i)
  58. {
  59. if (dis[x.sc]+ww[i]<dis[tt[i]])
  60. {
  61. dis[tt[i]]=dis[x.sc]+ww[i];
  62. Q.push(mp(dis[tt[i]],tt[i]));
  63. }
  64. i=pre[i];
  65. }
  66. }
  67. printf("%d\n",dis[n]);
  68. }

bzoj4152 [AMPPZ2014]The Captain的更多相关文章

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

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

  2. bzoj4152[AMPPZ2014]The Captain 最短路

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

  3. BZOJ4152 AMPPZ2014 The Captain(最短路)

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

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

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

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

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

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

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

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

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

  8. 【BZOJ4152】The Captain(最短路)

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

  9. 4152: [AMPPZ2014]The Captain

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

随机推荐

  1. NSArry的常见方法

    使用数组对象创建的数组功能非常强大,在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型.而Objective-C语言可以在Array数组中放任意类型的数据,值得注意的是只能 ...

  2. magento 切换数据库,使用不同数据库

    1. 在app/etc/local.xml 中,添加新的数据库选项 <?xml version="1.0"?> <config> <global> ...

  3. [LeetCode]题解(python):034-Search for a Range

    题目来源 https://leetcode.com/problems/search-for-a-range/ Given a sorted array of integers, find the st ...

  4. Top Five Communication Skills for Project Managers

    Research among project managers globally identifies top communication skills for leading teams. Lead ...

  5. Linux makefile 教程 非常详细,且易懂 (转)

    概述—— 什么是makefile?或许很多Winodws的程序员都不知道这 个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

  6. LogBack配置详解(一)

    一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...

  7. iOS 支付 [支付宝、银联、微信](转载)

    资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...

  8. Infinity loop in cursor iteration

    原始代码如下: begin DECLARE @SQL_STMT NVARCHAR(300), @V_CLIENT_ID INT, @V_PGNAME VARCHAR(1000), @V_LOGID I ...

  9. iOS:如何将自己的SDK用CocoaPods管理

    条件:  需要在终端上将工程发布到cocoapods上,这样才能用cocoapods进行管理. 步骤: 首先,你得有一个pod的账号 在终端中输入pod 可以查看关于pod 的命令帮助,输入pod t ...

  10. PHP的压力测试工具ab.exe 和mpm介绍提高并发数

    该工具是apache自带的,可以用它来测试网站的并发量有多大和某个页面的访问时间. 基本用法: 1.  进入CMD,转到apache的bin目录下. 2.  执行命令ab.exe  -n 访问的问次数 ...