Advertisement
leminhkt

E - TOURS13 (65)

Jul 9th, 2020
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define FOR(i, a, b) for (int i = (a); i < (b); ++i)
  5. #define trav(a, x)   for (auto& a: x)
  6. #define pb        push_back
  7. #define mp        make_pair
  8. #define fus       first
  9. #define sec       second
  10.  
  11. typedef pair<int, int>  pi;
  12. typedef vector<int>     vi;
  13. typedef vector<pi>      vpi;
  14.  
  15. template<typename T>inline void getSigned  (T& n) {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign(c=='-');if(sign)c=getchar();n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';if(sign)n=-n;}
  16. inline int    readint()    { int x;    return getSigned(x), x; }
  17. const int INF  = (1 << 30);
  18. const int LOVE = 1411;
  19.  
  20. /// ================================ Main part ================================
  21.  
  22. void Dijkstra(int n, int i, vpi edge[]){
  23.     vi d(n + 1, INF);
  24.     priority_queue<pi, vpi, greater<pi>> pq;
  25.     trav(j, edge[i]) pq.push(j), d[j.sec] = j.fus;
  26.     while(!pq.empty()){
  27.         int v = pq.top().sec,
  28.             vlen = pq.top().fus;
  29.         pq.pop();
  30.         if(vlen != d[v]) continue;
  31.         if(v == i){
  32.             cout << vlen << '\n'; return;
  33.         }
  34.         trav(j, edge[v]){
  35.             int u = j.sec,
  36.                 ulen = j.fus;
  37.             if(vlen + ulen < d[u])
  38.                 pq.push(mp(d[u] = vlen + ulen, u));
  39.         }
  40.     }
  41.     puts("-1"); return;
  42. }
  43.  
  44. void query(){
  45.     int n, m; cin >> n >> m;
  46.     int u, v, c;
  47.     vpi edge[n + 1];
  48.     while(cin >> u >> v >> c, edge[u].pb(mp(c, v)), --m);
  49.     FOR(i, 1, n + 1) Dijkstra(n, i, edge);
  50. }
  51.  
  52. int main(){
  53.     for(int t = readint(); t--;)
  54.         query();
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement