DuongNhi99

QBSCHOOL

Dec 9th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4.  
  5. const int N = 5005;
  6. const int oo = 1000111000;
  7.  
  8. typedef pair<ll, ll> ii;
  9.  
  10. int n, m;
  11. vector<ii> a[N];
  12. ll d[N], inc[N];
  13.  
  14. void dijkstra() {
  15.     priority_queue<ii, vector<ii>, greater<ii>> pq;
  16.     fill(d + 1, d + n + 1, oo);
  17.     d[1] = 0;
  18.     pq.push(ii(0, 1));
  19.  
  20.     while(!pq.empty()) {
  21.         int u = pq.top().second;
  22.         int du = pq.top().first;
  23.         pq.pop();
  24.  
  25.         if(du != d[u]) continue;
  26.  
  27.         for(int i = 0; i < a[u].size(); i++) {
  28.             int v = a[u][i].second;
  29.             int uv = a[u][i].first;
  30.  
  31.             if(d[v] == d[u] + uv)
  32.                 inc[v] += inc[u];
  33.  
  34.             if(d[v]> d[u]+ uv) {
  35.                 d[v] = du + uv;
  36.                 pq.push(ii(d[v], v));
  37.                 inc[v] = inc[u];
  38.             }
  39.         }
  40.     }
  41. }
  42.  
  43. int main() {
  44.     //freopen("QBSCHOOL.inp","r",stdin);
  45.     //freopen("QBSCHOOL.out","w",stdout);
  46.     ios_base::sync_with_stdio(false);
  47.     cin.tie(NULL); cout.tie(NULL);
  48.  
  49.     cin >> n >> m;
  50.     for(int i = 1; i <= m; i++) {
  51.         int k, p, q, w;
  52.         cin >> k >> p >> q >> w;
  53.         if(k == 1)
  54.             a[p].push_back(ii(w, q));
  55.         else {
  56.             a[p].push_back(ii(w, q));
  57.             a[q].push_back(ii(w, p));
  58.         }
  59.     }
  60.  
  61.     inc[1] = 1;
  62.     dijkstra();
  63.  
  64.     cout << d[n] << ' ' << inc[n];
  65.  
  66.     return 0;
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment