結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 56ms 31232KB
2 AC 100% 73ms 37232KB
3 AC 100% 28ms 21520KB
4 AC 100% 93ms 46320KB
5 AC 100% 44ms 27872KB
6 AC 100% 60ms 41776KB
7 AC 100% 90ms 44288KB
8 AC 100% 88ms 44928KB
9 AC 100% 39ms 24944KB
10 AC 100% 118ms 52976KB
11 AC 100% 53ms 29296KB
12 AC 100% 15ms 16976KB
13 AC 100% 46ms 29664KB
14 AC 100% 100ms 50288KB
15 AC 100% 65ms 37312KB
16 AC 100% 70ms 40000KB
17 AC 100% 101ms 46592KB
18 AC 100% 67ms 35056KB
19 AC 100% 14ms 17056KB
20 AC 100% 49ms 31296KB
21 AC 100% 25ms 21200KB
22 AC 100% 48ms 27184KB
23 AC 100% 56ms 28944KB
24 AC 100% 130ms 63536KB
25 AC 100% 90ms 45376KB
26 AC 100% 103ms 50400KB
27 AC 100% 28ms 18560KB
28 AC 100% 26ms 18048KB
29 AC 100% 63ms 35520KB
30 AC 100% 47ms 29264KB
31 AC 100% 123ms 56800KB
32 AC 100% 62ms 37008KB
33 AC 100% 15ms 12352KB
34 AC 100% 95ms 48256KB
35 AC 100% 16ms 12608KB
36 AC 100% 97ms 48048KB
37 AC 100% 43ms 25280KB
38 AC 100% 11ms 10224KB
39 AC 100% 125ms 58912KB
40 AC 100% 17ms 16176KB
41 AC 100% 104ms 51760KB
42 AC 100% 26ms 19136KB
43 AC 100% 101ms 58416KB
44 AC 100% 67ms 37264KB
45 AC 100% 80ms 37472KB
46 AC 100% 79ms 41232KB
47 AC 100% 112ms 55040KB
48 AC 100% 106ms 53472KB
49 AC 100% 60ms 35520KB
50 AC 100% 96ms 46336KB
51 AC 100% 24ms 17184KB
52 AC 100% 58ms 32272KB
53 AC 100% 33ms 19744KB
54 AC 100% 74ms 41680KB
55 AC 100% 24ms 17104KB
56 AC 100% 65ms 37280KB
57 AC 100% 36ms 27280KB
58 AC 100% 44ms 25568KB
59 AC 100% 21ms 18128KB
60 AC 100% 32ms 20912KB
61 AC 100% 45ms 25616KB
62 AC 100% 89ms 45792KB
63 AC 100% 87ms 43648KB
64 AC 100% 94ms 45584KB
65 AC 100% 88ms 44528KB
66 AC 100% 3ms 9376KB
67 AC 100% 59ms 29632KB
68 AC 100% 60ms 35888KB
69 AC 100% 156ms 64240KB
70 AC 100% 72ms 39424KB

ソースコード

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <algorithm>
#include <complex>
using namespace std;
 
#define REP(i,n) for(int i=0; i<n; ++i)
#define FOR(i,a,b) for(int i=a; i<=b; ++i)
#define FORR(i,a,b) for (int i=a; i>=b; --i)
#define ALL(c) (c).begin(), (c).end()
 
typedef long long ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<VL> VVL;
typedef vector<VI> VVI;
typedef pair<int,int> P;
typedef pair<ll,ll> PL;

int in() { int x; scanf("%d", &x); return x; }
ll lin() { ll x; scanf("%lld", &x); return x; }

struct edge{ll to,cost;};
const ll INF = 1e16;

int main() {
    int n, m, k;
    cin >> n >> m >> k;

    vector<vector<edge> > graph(n);
    REP(i,m){
        int a = in() - 1, b = in() - 1, c = in();
        graph[a].push_back(edge{b, c});
        graph[b].push_back(edge{a, c});
    }

    VL d(n, INF);
    priority_queue<PL, vector<PL>, greater<PL> > q;
    REP(i,k){
        int x = in() - 1, y = in();
        d[x] = -y;
        q.push(make_pair(-y, x));
    }
    while (!q.empty()){
        PL a = q.top();
        q.pop();
        int now = a.second;
        if(d[now] < a.first) continue;
        REP(i,graph[now].size()){
            edge e = graph[now][i];
            int next = e.to;
            if (d[next] > d[now] + e.cost){
                d[next] = d[now] + e.cost;
                q.push(make_pair(d[next], next));
            }
        }
    }

    int ans = 0;
    REP(i,n) if (d[i] <= 0) ans++;
    cout << ans << endl;

    return 0;
}