結果

提出番号 2059
提出者 _ei1333
言語 C++
提出日時 2018-08-04 15:08:02
問題名 (73)観光計画
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 112ms 37024KB
2 AC 100% 145ms 40192KB
3 AC 100% 60ms 25408KB
4 AC 100% 214ms 49696KB
5 AC 100% 121ms 34928KB
6 AC 100% 189ms 46528KB
7 AC 100% 164ms 44416KB
8 AC 100% 138ms 43360KB
9 AC 100% 228ms 33568KB
10 AC 100% 223ms 50752KB
11 AC 100% 104ms 34400KB
12 AC 100% 34ms 21488KB
13 AC 100% 77ms 29632KB
14 AC 100% 232ms 52864KB
15 AC 100% 145ms 39136KB
16 AC 100% 169ms 46528KB
17 AC 100% 159ms 44416KB
18 AC 100% 139ms 39136KB
19 AC 100% 30ms 19072KB
20 AC 100% 96ms 30688KB
21 AC 100% 100ms 29712KB
22 AC 100% 85ms 30688KB
23 AC 100% 88ms 32368KB
24 AC 100% 240ms 58144KB
25 AC 100% 189ms 43360KB
26 AC 100% 230ms 52864KB
27 AC 100% 48ms 23392KB
28 AC 100% 53ms 25072KB
29 AC 100% 151ms 39136KB
30 AC 100% 73ms 29632KB
31 AC 100% 216ms 54976KB
32 AC 100% 178ms 43360KB
33 AC 100% 28ms 19072KB
34 AC 100% 185ms 51808KB
35 AC 100% 29ms 19744KB
36 AC 100% 158ms 46496KB
37 AC 100% 75ms 29808KB
38 AC 100% 24ms 18528KB
39 AC 100% 229ms 57088KB
40 AC 100% 30ms 21056KB
41 AC 100% 254ms 54976KB
42 AC 100% 57ms 24352KB
43 AC 100% 270ms 58144KB
44 AC 100% 137ms 39392KB
45 AC 100% 139ms 39136KB
46 AC 100% 174ms 44416KB
47 AC 100% 238ms 57296KB
48 AC 100% 270ms 57088KB
49 AC 100% 133ms 41616KB
50 AC 100% 170ms 46528KB
51 AC 100% 49ms 24528KB
52 AC 100% 122ms 37184KB
53 AC 100% 68ms 25408KB
54 AC 100% 223ms 48448KB
55 AC 100% 41ms 22240KB
56 AC 100% 96ms 37024KB
57 AC 100% 62ms 26464KB
58 AC 100% 88ms 28576KB
59 AC 100% 47ms 21184KB
60 AC 100% 54ms 25776KB
61 AC 100% 85ms 29632KB
62 AC 100% 228ms 49696KB
63 AC 100% 146ms 41248KB
64 AC 100% 187ms 48640KB
65 AC 100% 195ms 47584KB
66 AC 100% 5ms 15664KB
67 AC 100% 93ms 30688KB
68 AC 100% 99ms 34912KB
69 AC 100% 283ms 61312KB
70 AC 100% 148ms 42496KB

ソースコード

#include <bits/stdc++.h>
#define rep(i, a, n) for(int i = a; i < n; i++)
#define int long long
#define chmin(a, b) a = min(a, b)
using namespace std;
typedef pair<int, int> P;
const int INF = 1e15;

struct edge{
   int to, cost;
};
int n, m, k;
vector<edge> G[100010]; 
int d[100010];

void dfs(int v, int p, int now){
    if(d[v] > now) return;
    d[v] = now;
    rep(i, 0, G[v].size()){
        int nxtv = G[v][i].to;
        int nxtn = now - G[v][i].cost;
        if(nxtv == p || nxtn < 0) continue;
        dfs(nxtv, v, nxtn);
    }
}

signed main(){
    cin >> n >> m >> k;
    rep(i, 0, m){
        int a, b, c;
        cin >> a >> b >> c;
        a--; b--;
        G[a].push_back({b, c});
        G[b].push_back({a, c});
    }
    rep(i, 0, n) d[i] = -1;
    vector<P> h(k); 
    rep(i, 0, k){
        cin >> h[i].second >> h[i].first;
        h[i].second--;
    }
    sort(h.rbegin(), h.rend());
    rep(i, 0, k){
        dfs(h[i].second, -1, h[i].first);
    }
    int ans = 0;
    rep(i, 0, n) if(d[i] >= 0) ans++;
    cout << ans << endl;
}