Roadblocks POJ 3255(次短路)

Posted vbel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Roadblocks POJ 3255(次短路)相关的知识,希望对你有一定的参考价值。

原题

题目链接

题目分析

给无向图,求次短路.相对于第k短路而言次短路还是好求的,只需要在跑dijkstra的过程中顺便记录次短路就行了.

代码

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <utility>
 6 #include <ctime>
 7 #include <cmath>
 8 #include <cstring>
 9 #include <string>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <set>
14 #include <map>
15 
16 using namespace std;
17 typedef long long LL;
18 const int INF_INT=0x3f3f3f3f;
19 const LL INF_LL=0x3f3f3f3f3f3f3f3f;
20 
21 typedef pair<int,int> P;
22 struct edgeint to,cost;;
23 vector<edge> es[6000];
24 int dis[6000],dis2[6000];
25 int n,r;
26 
27 void add()
28 
29     int s,t,c;
30     scanf("%d %d %d",&s,&t,&c);
31     es[s].push_back(edget,c);
32     es[t].push_back(edges,c);
33 
34 
35 void dijkstra()
36 
37     priority_queue<P,vector<P>,greater<P> > que;
38     for(int i=1;i<=n;i++) dis[i]=dis2[i]=INF_INT;
39     dis[1]=0;
40     que.push(P(0,1));
41     while(que.size())
42     
43         P p=que.top();que.pop();
44         int x=p.second;
45         if(p.first>dis2[x]) continue;
46         for(int i=0;i<es[x].size();i++)
47         
48             edge t=es[x][i];
49             int d=p.first+t.cost;
50             if(dis[t.to]>d) swap(dis[t.to],dis2[t.to]),dis[t.to]=d,que.push(P(d,t.to));
51             else if(dis2[t.to]>d) dis2[t.to]=d,que.push(P(d,t.to));
52         
53     
54 
55 
56 int main()
57 
58 //    freoGen("black.in","r",stdin);
59 //    freopen("black.out","w",stdout);
60     cin>>n>>r;
61     for(int i=0;i<r;i++) add();
62     dijkstra();
63     printf("%d\n",dis2[n]);
64     return 0;
65 

 

以上是关于Roadblocks POJ 3255(次短路)的主要内容,如果未能解决你的问题,请参考以下文章

POJ3255Roadblocks[次短路]

POJ-3255 Roadblocks---Dijkstra队列优化+次短路

Roadblocks POJ 3255(次短路)

POJ3255 Roadblocks [Dijkstra,次短路]

POJ 3255Roadblocks (Dijkstra求次短路)

POJ-3255-Roadblocks(次短路的另一种求法)