BZOJ-4152-最短路 我不是女神ヾ 2022-07-16 03:52 69阅读 0赞 ## 4152: \[AMPPZ2014\]The Captain ## Time Limit: 20 Sec Memory Limit: 256 MB Submit: 704 Solved: 269 \[ [Submit][]\]\[ [Status][]\]\[ [Discuss][]\] ## 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 题意:给你n个点的坐标,每两个点之间的花费是 min(|x1-x2|,|y1-y2|),求从第一个点到第n个点的最小花费。 题目思路: 这题的关键在于怎么建图,,只要建好了图直接跑最短路,,在网上借鉴的其他大牛的方法,只需分别按x和y排下序,然后用邻接表建图,这里开始没理解为什么要这么做,最后在纸上画了画就发现了,,因为排好序后的点的最短的点为相邻的两个点,所以只需按x找最短得和按y找最短的,最后在跑最短路,有人说这里卡spfa,,我也没试过,,我用的是dij+优先队列优化的,,跑了五秒, AC代码: #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn = 2e5+100; const int Inf = 0x7fffffff; int n,e; int hed[maxn<<1],dis[maxn]; struct P{ int x,y,id; }Poin[maxn]; struct L{ int u,v,w,nex; }Lin[maxn<<2]; struct Nod{ int x,dis; bool operator < (const Nod &a)const{ return a.dis<dis; } }; bool cmp1(P a,P b){return a.x<b.x;} bool cmp2(P a, P b){return a.y<b.y;} void addedge(int u,int v,int w){ Lin[e].u=u,Lin[e].v=v,Lin[e].w=w,Lin[e].nex =hed[u],hed[u]=e++; Lin[e].u=v,Lin[e].v=u,Lin[e].w=w,Lin[e].nex =hed[v],hed[v]=e++; } void Dij(){ for(int i=1;i<=n;i++) dis[i]=Inf; dis[1]=0; Nod a={1,0}; priority_queue<Nod>q; q.push(a); while(!q.empty()){ a=q.top(); q.pop(); int now = a.x; for(int i=hed[now];~i;i=Lin[i].nex){ Nod b; int v=Lin[i].v; if(dis[v]>dis[now]+Lin[i].w){ dis[v]=dis[now]+Lin[i].w; b.x=v; b.dis=dis[v]; q.push(b); } } } } int main() { cin>>n; e=0; memset(hed,-1,sizeof(hed)); for(int i=0;i<n;i++){ scanf("%d%d",&Poin[i].x,&Poin[i].y); Poin[i].id=i+1; } sort(Poin,Poin+n,cmp1); for(int i=0;i<n-1;i++) addedge(Poin[i].id,Poin[i+1].id,Poin[i+1].x-Poin[i].x); sort(Poin,Poin+n,cmp2); for(int i=0;i<n-1;i++) addedge(Poin[i].id,Poin[i+1].id,Poin[i+1].y-Poin[i].y); Dij(); cout<<dis[n]<<endl; return 0; } [Submit]: http://www.lydsy.com/JudgeOnline/submitpage.php?id=4152 [Status]: http://www.lydsy.com/JudgeOnline/problemstatus.php?id=4152 [Discuss]: http://www.lydsy.com/JudgeOnline/bbs.php?id=4152
相关 最短路 <table> <tbody> <tr> <td> <h2>最短路</h2> <strong>Time Limit: 5000/1000 MS (Java/O 向右看齐/ 2024年02月18日 22:54/ 0 赞/ 39 阅读
相关 最短路 \[hdu 1599\] ([http://acm.hdu.edu.cn/showproblem.php?pid=1599][http_acm.hdu.edu.cn_showp 红太狼/ 2022年08月04日 08:28/ 0 赞/ 162 阅读
相关 BZOJ-4152-最短路 4152: \[AMPPZ2014\]The Captain Time Limit: 20 Sec Memory Limit: 256 MB Submit: 70 我不是女神ヾ/ 2022年07月16日 03:52/ 0 赞/ 70 阅读
相关 C--最短路 Problem Description 给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。 Input 多组输入。 对于每组数据。 以你之姓@/ 2022年07月12日 08:26/ 0 赞/ 120 阅读
相关 最短路 队列+松弛操作 读取队头顶点u,并将队头顶点u出队(记得消除标记);将与点u相连的所有点v进行松弛操作,如果能更新估计值(即令d\[v\]变小),那么就更新,另外,如果 忘是亡心i/ 2022年06月11日 04:06/ 0 赞/ 205 阅读
相关 最短路 一下模板均已通过HDUOJ 2544 程序设计竞赛队空间和时间复杂度要求都很高,所以朴素的Dijkstra[算法][Link 1]无论时间还是空间,效率都很低。 所以,一般 淡淡的烟草味﹌/ 2022年06月09日 04:28/ 0 赞/ 235 阅读
相关 最短路径(Dijkstra)-HDU 2544-最短路 最短路径(Dijkstra)-HDU 2544-最短路 -------------------- 题目链接: [最短路][Link 1] 亦凉/ 2022年05月14日 03:38/ 0 赞/ 207 阅读
相关 最短路 最短路 典型用途:交通网络的问题——从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短? 交通网络用有向网来表示:顶点——表示城市,弧——表示两个城 淡淡的烟草味﹌/ 2022年03月18日 12:35/ 0 赞/ 249 阅读
相关 最短路 Floyed [http://codevs.cn/problem/1077/][http_codevs.cn_problem_1077] include<cstdi ﹏ヽ暗。殇╰゛Y/ 2021年11月18日 00:30/ 0 赞/ 289 阅读
相关 最短路 复习下图论算法 1. 邻接表的Dijkstra ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] / 冷不防/ 2021年11月02日 14:24/ 0 赞/ 442 阅读
还没有评论,来说两句吧...