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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

codeforces 689B Mike and Shortcuts 最短路

發布時間:2024/4/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces 689B Mike and Shortcuts 最短路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:給出n個點,兩點間的常規路為雙向路,路長為兩點之間的差的絕對值,第二行為捷徑,捷徑為單向路(第i個點到ai點),距離為1。問1到各個點之間的最短距離。

題目思路:SPFA求最短路

#include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<stdlib.h> #include<queue> #include<math.h> #include<map> #define INF 0x3f3f3f3f #define MAX 1000005 #define Temp 1000000000 #define MOD 1000000007using namespace std;int a[MAX],vis[MAX],dist[MAX],n,k;struct node {int u,v,w,next; }G[MAX];void Add(int u,int v,int w) {G[k].u=u;G[k].v=v;G[k].w=w;G[k].next=a[u];a[u]=k++; }void SPFA() {queue<int>Q;int st=1;vis[1]=1;dist[1]=0;Q.push(st);while(!Q.empty()){st=Q.front();Q.pop();vis[st]=0;for(int i=a[st];i!=-1;i=G[i].next){int v=G[i].v;if(dist[v] > dist[st]+G[i].w){dist[v]=dist[st]+G[i].w;if(!vis[v]){vis[v]=1;Q.push(v);}}}} }int main() {int q;while(scanf("%d",&n)!=EOF){k=0;memset(a,-1,sizeof(a));memset(vis,0,sizeof(vis));memset(dist,INF,sizeof(dist));for(int i=1;i<=n;i++){Add(i,i+1,1);Add(i+1,i,1);}for(int i=1;i<=n;i++){scanf("%d",&q);Add(i,q,1);}SPFA();for(int i=1;i<=n;i++)printf("%d%c",dist[i],i==n?'\n':' ');}return 0; } View Code

?

轉載于:https://www.cnblogs.com/alan-W/p/5997029.html

總結

以上是生活随笔為你收集整理的codeforces 689B Mike and Shortcuts 最短路的全部內容,希望文章能夠幫你解決所遇到的問題。

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