4152. [AMPPZ2014]The Captain

显然稠密图的边数时n2n^2n2量级,我们不可能把所有边建立出来,这时候通常寻求一些性质详细见【论题选编】稠密图最短路


针对本题我们可以先这样考虑,假设每个点有且只有一维信息,那么任意两点之间的距离可以写为∣xi−xj∣|x_i-x_j|∣xi​−xj​∣

首先我们对xxx进行排序,并且考虑相邻的三个点i,j,ki,j,ki,j,k,显然我们只需要在i,ji,ji,j以及j,kj,kj,k之间连边对于i→ki\to ki→k这条边没有必要去连。

稍微思考一下二维同样也是如此,详细也可以看上述博客博主解释

#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
using pii=pair<int,int>;
using ll=long long;
constexpr int N=200010,M=800010;
int h[N],e[M],ne[M],w[M],idx;
void add(int a,int b,int c){e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;}
int n;
struct node
{int x,y,id;
}q[N];
ll d[N];
bool st[N];
void dijkstra()
{priority_queue<pii,vector<pii>,greater<pii>> q;memset(d,0x3f,sizeof d);memset(st,0,sizeof st);d[1]=0;q.push({0,1});while(q.size()){int u=q.top().second;q.pop();if(st[u]) continue;st[u]=1;for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(d[v]>d[u]+w[i]){d[v]=d[u]+w[i];q.push({d[v],v});}}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n;memset(h,-1,sizeof h);for(int i=1;i<=n;i++) {int x,y;cin>>x>>y;q[i]={x,y,i};}sort(q+1,q+1+n,[](const node &a,const node&b){return a.x<b.x;});for(int i=1;i<n;i++) {int u=q[i].id,v=q[i+1].id,c=q[i+1].x-q[i].x;add(u,v,c),add(v,u,c);}sort(q+1,q+1+n,[](const node &a,const node&b){return a.y<b.y;});for(int i=1;i<n;i++) {int u=q[i].id,v=q[i+1].id,c=q[i+1].y-q[i].y;add(u,v,c),add(v,u,c);}dijkstra();cout<<d[n]<<'\n';return 0;
}

4152. [AMPPZ2014]The Captain(稠密图最短路)相关推荐

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

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

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

    Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1550  Solved: 619 [Submit][Status][Discuss] Descrip ...

  3. 朴素版dijkstra(稠密图)

    题目: 稠密图只需要用邻接矩阵来存就可以了,两个点之间可能存在重边,由于求最短路只需要把最小的存起来就可以了 初始化: 用dist[]来存储每个点到源点的最短距离,还未被更新过的用INF来表示,若是d ...

  4. 图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)

    题目链接 题目大意: 两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min 解题思路: 这里很明显就是变成了最短路的时时候就是把路径上边权最小值 ...

  5. BZOJ2662[BeiJing wc2012]冻结——分层图最短路

    题目描述 "我要成为魔法少女!"      "那么,以灵魂为代价,你希望得到什么?"  "我要将有关魔法和奇迹的一切,封印于卡片之中„„"  ...

  6. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  7. POJ - 3662 Telephone Lines(分层图最短路)

    题目链接:点击查看 题目大意:在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站Ai和Bi.特别的,1号基站是通信公司的总站,N号基站位于一座农场中.现在,农场主希望对通信线路进行升级,其中升级第 ...

  8. codeforces1473 E.Minimum Path(分层图最短路)

    E - Minimum Path 分层图最短路 第一个分层图 第0层就是按照题中给的点连边,从第0层到第1层我们连一条边权是0的边,从第1层到第2层连一条边权是原先边权2倍的边,当然第1层以及第2层之 ...

  9. 【bzoj2834】回家的路 分层图最短路

    题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路 ...

最新文章

  1. c++17(24)-枚举与switch
  2. UVA4671 K-neighbor substrings FFT+字符串hash
  3. JVM 优化经验总结
  4. pytorch调用tensorboard方法尝试
  5. access横向求和sum_数据横向、纵向及交叉求和,同事用Alt+=号一键搞定!不需要函数...
  6. Strtus2标签s:url
  7. SogouLabDic搜狗词库
  8. EMC之 “不整改好别回来了”
  9. 二级C语言考试环境注意事项
  10. 中科院阿里云发布11比特云超导量子处理器
  11. 深入分析AIL语言及init.rc文件
  12. python中的scaler_使用时值错误scaler.inverse_变换在Python中
  13. @RunWith注解找不到,怎么办?
  14. 开源ios街机模拟器
  15. 计算数组A的大小与地址
  16. 关于ios低版本在app store下载软件时由于版本低导致不能下载的解决办法
  17. 在python中将数据库查询数据进行转换为DataFrame格式
  18. html5公司年终抽奖程序源码按数字随机抽奖
  19. 私人网盘树洞外链源码
  20. Java基于springboot+vue+elementUI股票交易模拟系统

热门文章

  1. python for net_转:.NET 4.0 下使用 Python for .NET
  2. mysql time类型转换_mysql8 参考手册--Date日期和Time时间类型之间的转换
  3. python类和函数_构建程序. Python中的类和函数
  4. c++的STL中的map(哈希表)与unordered_map
  5. leetcode54:螺旋矩阵
  6. 听红宝书译者谈Web视角下的前端开发
  7. [JavaWeb-HTML]HTML概念介绍和快速入门
  8. [PAT乙级]1030 完美数列
  9. [Java基础]数据输入
  10. 蓝桥杯2018初赛-哪天返回-模拟