結果

提出番号 1820
提出者 shot
言語 C++
提出日時 2018-08-04 14:05:22
問題名 (73)観光計画
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 74ms 36288KB
2 AC 100% 78ms 40288KB
3 AC 100% 25ms 20096KB
4 AC 100% 116ms 58160KB
5 AC 100% 70ms 41872KB
6 AC 100% 109ms 53888KB
7 AC 100% 93ms 46128KB
8 AC 100% 89ms 46096KB
9 AC 100% 67ms 40624KB
10 AC 100% 130ms 59072KB
11 AC 100% 52ms 30048KB
12 AC 100% 15ms 15552KB
13 AC 100% 40ms 27136KB
14 AC 100% 126ms 61488KB
15 AC 100% 70ms 39024KB
16 AC 100% 98ms 53728KB
17 AC 100% 102ms 43744KB
18 AC 100% 84ms 38000KB
19 AC 100% 14ms 15232KB
20 AC 100% 45ms 28848KB
21 AC 100% 42ms 28256KB
22 AC 100% 41ms 25936KB
23 AC 100% 45ms 27584KB
24 AC 100% 141ms 60688KB
25 AC 100% 85ms 43120KB
26 AC 100% 121ms 61216KB
27 AC 100% 22ms 17456KB
28 AC 100% 23ms 17136KB
29 AC 100% 77ms 39056KB
30 AC 100% 47ms 26480KB
31 AC 100% 146ms 62960KB
32 AC 100% 97ms 50736KB
33 AC 100% 14ms 11760KB
34 AC 100% 120ms 59856KB
35 AC 100% 14ms 12320KB
36 AC 100% 60ms 42080KB
37 AC 100% 41ms 25984KB
38 AC 100% 11ms 10464KB
39 AC 100% 117ms 60272KB
40 AC 100% 11ms 14848KB
41 AC 100% 129ms 63184KB
42 AC 100% 30ms 18288KB
43 AC 100% 145ms 65056KB
44 AC 100% 80ms 36144KB
45 AC 100% 82ms 39664KB
46 AC 100% 100ms 52848KB
47 AC 100% 131ms 66352KB
48 AC 100% 160ms 64864KB
49 AC 100% 71ms 49296KB
50 AC 100% 77ms 48128KB
51 AC 100% 22ms 16912KB
52 AC 100% 65ms 33040KB
53 AC 100% 35ms 20352KB
54 AC 100% 115ms 55488KB
55 AC 100% 16ms 15920KB
56 AC 100% 51ms 34688KB
57 AC 100% 30ms 24400KB
58 AC 100% 44ms 24224KB
59 AC 100% 24ms 16256KB
60 AC 100% 24ms 19712KB
61 AC 100% 46ms 26016KB
62 AC 100% 118ms 57616KB
63 AC 100% 68ms 40592KB
64 AC 100% 115ms 56576KB
65 AC 100% 109ms 47328KB
66 AC 100% 3ms 8656KB
67 AC 100% 47ms 31264KB
68 AC 100% 46ms 32944KB
69 AC 100% 137ms 69728KB
70 AC 100% 83ms 42656KB

ソースコード

#include <bits/stdc++.h>
using namespace std;

#define int long long

struct Edge {
  int to, cost;
  Edge(int to, int cost) : to(to), cost(cost) {}  
};

signed main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cout << fixed << setprecision(12);

  int N, M, K;
  cin >> N >> M >> K;

  vector<Edge> G[N];
  for ( int i = 0; i < M; i++ ) {
    int a, b, c;
    cin >> a >> b >> c;
    a--; b--;
    G[a].emplace_back(Edge(b, c));    
    G[b].emplace_back(Edge(a, c));    
  }
  
  typedef pair<int, int> P;  
  priority_queue<P> Q;
  for ( int i = 0; i < K; i++ ) {
    int h, d;
    cin >> h >> d;
    h--;
    Q.push({d, h});    
  }

  vector<bool> used(N, false);  
  int ans = 0;
  while ( !Q.empty() ) {
    P p = Q.top(); Q.pop();
    int d = p.first, h = p.second;    

    if ( used[h] ) continue;
    used[h] = true;
    ans++;

    for ( int i = 0; i < (int)G[h].size(); i++ ) {
      Edge u = G[h][i];      
      int to = u.to, cost = u.cost;      
      if ( d-cost < 0 ) continue;
      Q.push({d-cost, to});      
    }    
  }

  cout << ans << endl;
  
  return 0;
}