日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

BZOJ4152 AMPPZ2014 The Captain(最短路)

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ4152 AMPPZ2014 The Captain(最短路) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  事實上每次走到橫坐標或縱坐標最接近的點一定可以取得最優方案。于是這樣連邊跑最短路就可以了。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 200010
int n,p[N],d[N],t=0;
bool flag[N];
struct point{int x,y,i;
}a[N];
struct data{int to,nxt,len;
}edge[N<<2];
struct data2
{int x,d;bool operator <(const data2&a) const{return d>a.d;}
};
priority_queue<data2> q;
void addedge(int x,int y,int z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
void dijkstra()
{while (!q.empty()) q.pop();for (int i=2;i<=n;i++) d[i]=1000000001;q.push((data2){1,0});memset(flag,0,sizeof(flag));for (int i=1;i<=n;i++){while (!q.empty()&&flag[q.top().x]) q.pop();if (q.empty()) break;data2 v=q.top();q.pop();flag[v.x]=1;for (int j=p[v.x];j;j=edge[j].nxt)if (v.d+edge[j].len<d[edge[j].to]){d[edge[j].to]=v.d+edge[j].len;q.push((data2){edge[j].to,d[edge[j].to]});}}
}
bool cmp1(const point&a,const point&b)
{return a.x<b.x;
}
bool cmp2(const point&a,const point&b)
{return a.y<b.y;
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj4152.in","r",stdin);freopen("bzoj4152.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read();for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read(),a[i].i=i;sort(a+1,a+n+1,cmp1);for (int i=1;i<n;i++)addedge(a[i].i,a[i+1].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y))),addedge(a[i+1].i,a[i].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y)));sort(a+1,a+n+1,cmp2);for (int i=1;i<n;i++)addedge(a[i].i,a[i+1].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y))),addedge(a[i+1].i,a[i].i,min(abs(a[i].x-a[i+1].x),abs(a[i].y-a[i+1].y)));dijkstra();cout<<d[n];return 0;
}

?

轉載于:https://www.cnblogs.com/Gloid/p/9827815.html

總結

以上是生活随笔為你收集整理的BZOJ4152 AMPPZ2014 The Captain(最短路)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。