POJ3255 Roadblocks(次短路)

 

POJ3255 Roadblocks(次短路)

分类: 最短路径   91人阅读  评论(0)  收藏  举报

http://poj.org/problem?id=3255

题意:某街区共有R条道路、N个路口。道路可以双向通行。问1号路口到N号路口的次短路长度是多少次短路指的是比最短路长度长的次短的路径。同一条边可以经过多次。


  1. #include <cstdio>  
  2. #include <cstring>  
  3. #include <vector>  
  4. #include <queue>  
  5. #include <algorithm>  
  6. using namespace std;  
  7.   
  8. const int maxn = 5000 + 10;  
  9. const int INF = 1000000000;  
  10. typedef pair<intint> P;  
  11. int N, R;  
  12. struct edge {  
  13.     int to, cost;  
  14. };  
  15. vector<edge> G[maxn];  
  16. int dist[maxn];  ///save minimum path
  17. int dist2[maxn];  //次短路经
  18. void solve() {  
  19.     priority_queue<P, vector<P>, greater<P> > que;  
  20.     fill(dist, dist+N, INF);  //memset 
  21.     fill(dist2, dist2+N, INF);  
  22.     dist[0] = 0;  
  23.     que.push(P(0,0));  
  24.     while(!que.empty()) {  
  25.         P p = que.top();  
  26.         que.pop();  
  27.         int v = p.second, d = p.first;  
  28.         if(dist2[v] < d) continue;  
  29.         for(int i=0; i<G[v].size(); ++i) {  
  30.             edge &e = G[v][i];  
  31.             int d2 = d + e.cost;  
  32.             if(dist[e.to]>d2) {  
  33.                 swap(dist[e.to], d2);  
  34.                 que.push(P(dist[e.to], e.to));  
  35.             }  
  36.             if(dist2[e.to] >d2&&dist[e.to] <d2) {  
  37.                 dist2[e.to] = d2;  
  38.                 que.push(P(dist2[e.to], e.to));  
  39.             }  
  40.         }  
  41.     }  
  42.     printf("%d\n",dist2[N-1]);  
  43. }  
  44.   
  45. int main() {  
  46.     int i, a, b, c;  
  47.     edge e;  
  48.     while(~scanf("%d%d",&N,&R)) {  
  49.         for(i=0; i<R; ++i) {  
  50.             scanf("%d%d%d", &a, &b, &c);  
  51.             a--,b--;  
  52.             e.to = b, e.cost = c;  
  53.             G[a].push_back(e);  
  54.             e.to = a;  
  55.             G[b].push_back(e);  
  56.         }  
  57.         solve();  
  58.     }  
  59.     return 0;  
  60. }  

你可能感兴趣的:(最短路径)