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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4152. [AMPPZ2014]The Captain(稠密图最短路)

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4152. [AMPPZ2014]The Captain(稠密图最短路) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 kik這條邊沒有必要去連。

稍微思考一下二維同樣也是如此,詳細也可以看上述博客博主解釋

#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(稠密图最短路)的全部內容,希望文章能夠幫你解決所遇到的問題。

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