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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Roadblocks(次短路经)

發布時間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Roadblocks(次短路经) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

The countryside consists of R (1 ≤ R ≤ 100,000) bidirectional roads, each linking two of the N (1 ≤ N ≤ 5000) intersections, conveniently numbered 1…N. Bessie starts at intersection 1, and her friend (the destination) is at intersection N.

The second-shortest path may share roads with any of the shortest paths, and it may backtrack i.e., use the same road or intersection more than once. The second-shortest path is the shortest path whose length is longer than the shortest path(s) (i.e., if two or more shortest paths exist, the second-shortest path is the one whose length is longer than those but no longer than any other path).

Input
Line 1: Two space-separated integers: N and R
Lines 2… R+1: Each line contains three space-separated integers: A, B, and D that describe a road that connects intersections A and B and has length D (1 ≤ D ≤ 5000)
Output
Line 1: The length of the second shortest path between node 1 and node N
Sample Input
4 4
1 2 100
2 4 200
2 3 250
3 4 100
Sample Output
450
Hint
Two routes: 1 -> 2 -> 4 (length 100+200=300) and 1 -> 2 -> 3 -> 4 (length 100+250+100=450)

第一次接觸次短路的問題,原來接觸過次小生成樹的問題,現在也忘了。
求解次短路也是按著最短路的套路來。
從1到n的次短路等于dis1[i]+p[i][j]+dis2[j],其中dis1代表著頂點一到頂點i的最短路,dis2代表著n到j的最短路,再加上之間的距離就好了。其中用的vector,spfa求解最短路
代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> #define ll long long #define inf 0x3f3f3f3f using namespace std;const int maxx=5e3+10; struct node{int v;int w; }pp; vector<node>p[maxx]; int dis1[maxx]; int dis2[maxx]; int vis[maxx]; int n,m;void spfa(int u,int *dis) {queue<int >q;memset(vis,0,sizeof(vis));vis[u]=1;dis[u]=0;q.push(u);while(!q.empty()){u=q.front();q.pop();for(int i=0;i<p[u].size();i++){int v=p[u][i].v;int w=p[u][i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=1;q.push(v);}}}} }int main() {scanf("%d%d",&n,&m);memset(dis1,inf,sizeof(dis1));memset(dis2,inf,sizeof(dis2));for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);pp.v=b;pp.w=c;p[a].push_back(pp);pp.v=a;pp.w=c;p[b].push_back(pp);}spfa(1,dis1);spfa(n,dis2);int ans=inf;for(int i=1;i<=n;i++){for(int j=0;j<p[i].size();j++){int v=p[i][j].v;int w=p[i][j].w;int ant=dis1[i]+dis2[v]+w;if(ant<ans&&ant>dis1[n]){ans=ant;}}}printf("%d\n",ans); }

努力加油a啊,(o)/~

總結

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

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