結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 55ms 31232KB
2 AC 100% 62ms 37216KB
3 AC 100% 26ms 21520KB
4 AC 100% 79ms 46336KB
5 AC 100% 32ms 27904KB
6 AC 100% 65ms 41792KB
7 AC 100% 69ms 44304KB
8 AC 100% 73ms 44928KB
9 AC 100% 32ms 25200KB
10 AC 100% 108ms 53008KB
11 AC 100% 45ms 29296KB
12 AC 100% 12ms 16960KB
13 AC 100% 33ms 29664KB
14 AC 100% 96ms 50288KB
15 AC 100% 71ms 37312KB
16 AC 100% 52ms 40016KB
17 AC 100% 94ms 46592KB
18 AC 100% 62ms 35072KB
19 AC 100% 16ms 17072KB
20 AC 100% 43ms 29712KB
21 AC 100% 21ms 21184KB
22 AC 100% 39ms 27184KB
23 AC 100% 41ms 27936KB
24 AC 100% 123ms 59360KB
25 AC 100% 73ms 45392KB
26 AC 100% 96ms 50400KB
27 AC 100% 22ms 19072KB
28 AC 100% 20ms 17440KB
29 AC 100% 49ms 35520KB
30 AC 100% 35ms 29264KB
31 AC 100% 96ms 56816KB
32 AC 100% 57ms 37008KB
33 AC 100% 11ms 12368KB
34 AC 100% 88ms 48272KB
35 AC 100% 13ms 12624KB
36 AC 100% 63ms 44432KB
37 AC 100% 39ms 25296KB
38 AC 100% 9ms 9984KB
39 AC 100% 112ms 58928KB
40 AC 100% 13ms 16192KB
41 AC 100% 101ms 51776KB
42 AC 100% 26ms 19136KB
43 AC 100% 109ms 58448KB
44 AC 100% 55ms 35712KB
45 AC 100% 72ms 37488KB
46 AC 100% 70ms 41232KB
47 AC 100% 105ms 55056KB
48 AC 100% 104ms 53488KB
49 AC 100% 44ms 35536KB
50 AC 100% 91ms 46352KB
51 AC 100% 20ms 16944KB
52 AC 100% 43ms 32272KB
53 AC 100% 30ms 19760KB
54 AC 100% 61ms 41712KB
55 AC 100% 17ms 17120KB
56 AC 100% 53ms 36256KB
57 AC 100% 30ms 27296KB
58 AC 100% 40ms 25584KB
59 AC 100% 23ms 18128KB
60 AC 100% 23ms 20672KB
61 AC 100% 36ms 25616KB
62 AC 100% 70ms 45808KB
63 AC 100% 67ms 43648KB
64 AC 100% 89ms 45600KB
65 AC 100% 80ms 44544KB
66 AC 100% 3ms 8512KB
67 AC 100% 45ms 29632KB
68 AC 100% 50ms 35920KB
69 AC 100% 135ms 64240KB
70 AC 100% 65ms 37872KB

ソースコード

// 基本テンプレート
 
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
using namespace std;
 
#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)
#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)
#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define int long long int
 
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
 
typedef pair<int, int> pii;
typedef long long ll;
 
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
const ll INF = 1001001001001001LL;
const ll MOD = 1000000007LL;

int N, M, K;
int max_d[100010];
using Graph = vector< vector<pii> >;

struct Elem {
    int pos, cost;
    bool operator<(const Elem &e) const {
        return cost < e.cost;
    }
};
 
signed main() {
    scanf("%lld%lld%lld", &N, &M, &K);

    Graph G(N);
    for(int i=0; i<M; i++) {
        int a, b, c; scanf("%lld%lld%lld", &a, &b, &c);
        a--; b--;
        G[a].push_back(make_pair(b, c));
        G[b].push_back(make_pair(a, c));
    }

    fill(max_d, max_d + N, -1);
    priority_queue<Elem> que;
    while(K--) {
        int source, d;
        scanf("%lld%lld", &source, &d);
        source--;

        max_d[source] = d;
        que.push(Elem{source, d});
    }

    while(que.size()) {
        Elem cur = que.top(); que.pop();

        int u = cur.pos, cost = cur.cost;
        if(max_d[u] > cost) continue;

        for(auto e : G[u]) {
            int v = e.first, weight = e.second;

            int n_dist = cost - weight;
            if(n_dist < 0) continue;
            if(max_d[v] > n_dist) continue;

            max_d[v] = n_dist;
            que.push(Elem{v, n_dist});
        }
    }

    int ans = 0;
    for(int i=0; i<N; i++) if(max_d[i] >= 0) ans++;
    printf("%lld\n", ans);
    return 0;
}