結果

提出番号 1813
提出者 shot
言語 C++
提出日時 2018-08-04 14:01:23
問題名 (73)観光計画
結果 CE
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 CE 0% 0ms 0KB
2 CE 0% 0ms 0KB
3 CE 0% 0ms 0KB
4 CE 0% 0ms 0KB
5 CE 0% 0ms 0KB
6 CE 0% 0ms 0KB
7 CE 0% 0ms 0KB
8 CE 0% 0ms 0KB
9 CE 0% 0ms 0KB
10 CE 0% 0ms 0KB
11 CE 0% 0ms 0KB
12 CE 0% 0ms 0KB
13 CE 0% 0ms 0KB
14 CE 0% 0ms 0KB
15 CE 0% 0ms 0KB
16 CE 0% 0ms 0KB
17 CE 0% 0ms 0KB
18 CE 0% 0ms 0KB
19 CE 0% 0ms 0KB
20 CE 0% 0ms 0KB
21 CE 0% 0ms 0KB
22 CE 0% 0ms 0KB
23 CE 0% 0ms 0KB
24 CE 0% 0ms 0KB
25 CE 0% 0ms 0KB
26 CE 0% 0ms 0KB
27 CE 0% 0ms 0KB
28 CE 0% 0ms 0KB
29 CE 0% 0ms 0KB
30 CE 0% 0ms 0KB
31 CE 0% 0ms 0KB
32 CE 0% 0ms 0KB
33 CE 0% 0ms 0KB
34 CE 0% 0ms 0KB
35 CE 0% 0ms 0KB
36 CE 0% 0ms 0KB
37 CE 0% 0ms 0KB
38 CE 0% 0ms 0KB
39 CE 0% 0ms 0KB
40 CE 0% 0ms 0KB
41 CE 0% 0ms 0KB
42 CE 0% 0ms 0KB
43 CE 0% 0ms 0KB
44 CE 0% 0ms 0KB
45 CE 0% 0ms 0KB
46 CE 0% 0ms 0KB
47 CE 0% 0ms 0KB
48 CE 0% 0ms 0KB
49 CE 0% 0ms 0KB
50 CE 0% 0ms 0KB
51 CE 0% 0ms 0KB
52 CE 0% 0ms 0KB
53 CE 0% 0ms 0KB
54 CE 0% 0ms 0KB
55 CE 0% 0ms 0KB
56 CE 0% 0ms 0KB
57 CE 0% 0ms 0KB
58 CE 0% 0ms 0KB
59 CE 0% 0ms 0KB
60 CE 0% 0ms 0KB
61 CE 0% 0ms 0KB
62 CE 0% 0ms 0KB
63 CE 0% 0ms 0KB
64 CE 0% 0ms 0KB
65 CE 0% 0ms 0KB
66 CE 0% 0ms 0KB
67 CE 0% 0ms 0KB
68 CE 0% 0ms 0KB
69 CE 0% 0ms 0KB
70 CE 0% 0ms 0KB

ソースコード

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

#define int long long

struct Edge {
  int to, 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});    
  }

  bool used[N] = {};
  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 ( Edge u : G[h] ) {
      int to = u.to, cost = u.cost;      
      if ( d-cost < 0 ) continue;
      Q.push({d-cost, to});      
    }    
  }

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