次短路演算法
阿新 • • 發佈:2021-12-10
ACWing1133. 第二短路
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef pair<int,int> pii; 4 const int N=1e5+5; 5 int dis1[N],dis2[N],ans=INT_MAX; 6 vector<pii>G[N]; 7 struct cmp 8 { 9 bool operator ()(pii &a,pii &b) 10 { 11 return a.second>b.second;12 } 13 }; 14 void dijkstra() 15 { 16 priority_queue<pii,vector<pii>,cmp>q; 17 q.push({1,0}); 18 while(q.size()) 19 { 20 auto p=q.top(); 21 int u=p.first,d=p.second; 22 q.pop(); 23 for(int i=0;i<G[u].size();i++) 24 { 25 int vv=G[u][i].first,w=G[u][i].second;26 if(d+w<dis1[vv]) 27 { 28 dis2[vv]=dis1[vv]; 29 dis1[vv]=d+w; 30 q.push({vv,d+w}); 31 } 32 else if(d+w>dis1[vv]&&d+w<dis2[vv]) 33 { 34 dis2[vv]=d+w; 35 q.push({vv,d+w}); 36 } 37 } 38 39 } 40 41} 42 int main() 43 { 44 int n,m; 45 scanf("%d%d",&n,&m); 46 memset(dis1,0x3f,sizeof(dis1)); 47 memset(dis2,0x3f,sizeof(dis2)); 48 for(int i=1;i<=m;i++) 49 { 50 int u,v,w; 51 scanf("%d%d%d",&u,&v,&w); 52 G[u].push_back({v,w}); 53 G[v].push_back({u,w}); 54 } 55 dijkstra(); 56 cout<<dis2[n]<<endl; 57 return 0; 58 }