Advertisement
Hezov

CSES Investigation

Mar 24th, 2025
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. using namespace std;
  5. typedef long long ll;
  6. const ll mxN = 1e5, MOD = 1e9+7, inf = 1e17;
  7. vector<pair<ll,ll>> adj[mxN+1];
  8. ll d[mxN+1], visited[mxN+1], cnt[mxN+1], M[mxN+1],mini[mxN+1];
  9. int main()
  10. {
  11.     ios_base::sync_with_stdio(false);
  12.     cin.tie(0);
  13.     cout.tie(0);
  14.     int n , m;
  15.     cin >> n >> m;
  16.     for(int i = 1;i<=m;i++)
  17.     {
  18.         int u , v, w;
  19.         cin >> u >> v >> w;
  20.         adj[u].push_back({v,w});
  21.     }
  22.     for(int i = 2;i<=n;i++)
  23.     {
  24.         d[i] = mini[i] = inf;
  25.         M[i] = -inf;
  26.     }
  27.     cnt[1] = 1;
  28.     mini[1] = 0;
  29.     M[1] = 0;
  30.     priority_queue<pair<ll,ll>> pq;
  31.     pq.push({0,1}); // distance -- node
  32.     while(!pq.empty())
  33.     {
  34.         int node = pq.top().second;
  35.         pq.pop();
  36.         if(visited[node]) continue;
  37.         visited[node] = true;
  38.         for(auto it : adj[node])
  39.         {
  40.             ll u = it.first, w = it.second;
  41.             ll dist = d[node] + w;
  42.             if(d[u] > dist)
  43.             {
  44.                 d[u] = dist;
  45.                 mini[u] = mini[node]+1;
  46.                 M[u] = M[node]+1;
  47.                 cnt[u] = cnt[node];
  48.                 pq.push({-dist,u});
  49.             }
  50.             else if(d[u] == dist)
  51.             {
  52.                 mini[u] = min(mini[u], mini[node]+1);
  53.                 M[u] = max(M[u],M[node]+1);
  54.                 cnt[u] = (cnt[u] + cnt[node]);
  55.                 if(cnt[u] >= inf) cnt[u]%=MOD;
  56.             }
  57.         }
  58.     }
  59.     cout << d[n] << ' ' << cnt[n] % MOD << ' ' << mini[n] << ' ' << M[n];
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement