Advertisement
dvaath

DIJKSTRA

Feb 20th, 2020
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define VA AnhNguyenProV2
  3. #define pb push_back
  4. #define ll long long
  5. #define FOR(i, a, b) for(int i = int(a); i <= int(b); i++)
  6. #define FORD(i, a, b) for(int i = int(a); i >= int(b); i--)
  7. #define REP(i, r) for(int i = 0; i < r; i++)
  8. #define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  9. #define READFILE freopen("input.txt", "r", stdin)
  10. #define WRITEFILE freopen("output.txt", "w", stdout);
  11. #define fi first
  12. #define se second
  13. #define MAX 105
  14. #define ii pair<int,int>
  15. using namespace std;
  16.  
  17. vector<ii> a[MAX];
  18. int d[MAX],n,m, par[MAX], k;
  19.  
  20. void Dijkstra(int st, int en)
  21. {
  22.     memset(par,0,sizeof par);
  23.     fill(d,d+n+2, INT_MAX);
  24.     d[st]=0;
  25.     priority_queue<ii,vector<ii>,greater<ii>> pq;
  26.     pq.push(ii(0,st));
  27.  
  28.     while (!pq.empty())
  29.     {
  30.         int u=pq.top().se, du=pq.top().fi;
  31.         pq.pop();
  32.         if (du!=d[u]) continue;
  33.         for(ii t: a[u])
  34.         {
  35.             int v=t.se, uv=t.fi;
  36.             if (du+uv<d[v])
  37.             {
  38.                 d[v]=du+uv;
  39.                 par[v]=u;
  40.                 pq.push(ii(d[v],v));
  41.             }
  42.         }
  43.     }
  44. }
  45.  
  46. void Trace(int u,int dem)
  47. {
  48.     if (u==0) {cout<<dem<<" ";return;}
  49.     Trace(par[u],dem+1);
  50.     cout<<u<<" ";
  51. }
  52.  
  53. int main()
  54. {
  55.     #ifndef ONLINE_JUDGE
  56.         READFILE;
  57.     #endif
  58.     FAST;
  59.  
  60.     cin >> n >> m >> k;
  61.     int u,v,w,cd;
  62.  
  63.     FOR(i,1,m)
  64.     {
  65.         cin >> u >> v >> w;
  66.         a[u].pb(ii(w,v)); a[v].pb(ii(w,u));
  67.     }
  68.  
  69.     FOR(i,1,k)
  70.     {
  71.         cin >> cd >> u >> v;
  72.         Dijkstra(u,v);
  73.         if (cd==0) cout<<d[v];
  74.         else Trace(v,0);
  75.         cout<<endl;
  76.     }
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement