Advertisement
anas_harby

Untitled

Jul 20th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 100005
  3. #define INF 1e9 * 100005
  4. using namespace std;
  5.  
  6. int n, m, k;
  7. vector <pair<int, long long> > adj[MAX];
  8. bool reached[MAX];
  9.  
  10. int getSP() {
  11.     vector<long long> dist(MAX, INF);
  12.     priority_queue<pair<long long, int>, vector<pair<long long, int> >, greater<pair<long long, int> > > pq;
  13.     pq.push(make_pair(0, 0));
  14.     dist[0] = 0;
  15.     for (int i = 0; i < k; i++) {
  16.         int s; long long y;
  17.         scanf("%d %lld", &s, &y);
  18.         s--;
  19.         dist[s] = min(dist[s], y);
  20.         if (!reached[s]) {
  21.             reached[s] = true;
  22.             pq.push(make_pair(dist[s], s));
  23.         }
  24.     }
  25.     while (!pq.empty()) {
  26.         int u = pq.top().second;
  27.         pq.pop();
  28.         for (int i = 0; i < adj[u].size(); i++) {
  29.             int v = adj[u][i].first;
  30.             long long w = adj[u][i].second;
  31.             if (dist[v] == INF) {
  32.                 dist[v] = dist[u] + w;
  33.                 pq.push(make_pair(dist[v], v));
  34.             }
  35.             else if (dist[v] >= dist[u] + w) {
  36.                 dist[v] = dist[u] + w;
  37.                 reached[v] = false;
  38.                 pq.push(make_pair(dist[v], v));
  39.             }
  40.         }
  41.     }
  42.     int ans = k;
  43.     for (int i = 0; i < n; i++)
  44.         if (reached[i])
  45.             ans--;
  46.     return ans;
  47. }
  48.  
  49. int main() {
  50.     scanf("%d %d %d", &n, &m, &k);
  51.     for (int i = 0; i < m; i++) {
  52.         int u, v;
  53.         long long x;
  54.         scanf("%d %d %lld", &u, &v, &x);
  55.         u--, v--;
  56.         adj[u].push_back(make_pair(v, x));
  57.         adj[v].push_back(make_pair(u, x));
  58.     }
  59.     cout << getSP();
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement