Advertisement
Riz1Ahmed

Second Max path (LOJ 1088. Not the best)

Nov 6th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.80 KB | None | 0 0
  1. /******************
  2. Find Second Maximum path (LOJ 1088)
  3. ******************/
  4. #include <cstdio>
  5. #include <vector>
  6. #include <queue>
  7. using namespace std;
  8. struct R{int n,w;};
  9. int main(){
  10.     int t,n,m,i,u,v,w,w1,mn1,mn2,cs=1;
  11.     scanf("%d",&t);
  12.     while (t--){
  13.         scanf("%d %d",&n,&m);
  14.         vector<R> g[n+2];
  15.         for (i=0; i<m; i++){
  16.             scanf("%d %d %d",&u,&v,&w);
  17.             g[u].push_back({v,w});
  18.             g[v].push_back({u,w});
  19.         }
  20.         queue<R> q;
  21.         q.push({1,0});
  22.         mn1=mn2=1e9;
  23.         while (q.size()){
  24.             u=q.front().n, w=q.front().w, q.pop();
  25.             for (i=0; i<g[u].size(); i++){
  26.                 v=g[u][i].n, w1=w+g[u][i].w;
  27.                 if (w1<mn1 || w1<mn2){
  28.                     q.push({v,w1});
  29.                     if (v==n){
  30.                         if (w1<mn1) mn2=mn1, mn1=w1;
  31.                         else if (w1!=mn1) mn2=w1;
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.         printf("Case %d: %d\n",cs++,mn2);
  37.     } return 0;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement