結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 116ms 20224KB
2 AC 100% 133ms 24608KB
3 AC 100% 57ms 16976KB
4 AC 100% 158ms 28352KB
5 AC 100% 83ms 17152KB
6 AC 100% 157ms 25296KB
7 AC 100% 165ms 31536KB
8 AC 100% 178ms 33280KB
9 AC 100% 77ms 15280KB
10 AC 100% 199ms 35232KB
11 AC 100% 98ms 19520KB
12 AC 100% 34ms 14032KB
13 AC 100% 78ms 24000KB
14 AC 100% 212ms 31856KB
15 AC 100% 161ms 27968KB
16 AC 100% 128ms 23792KB
17 AC 100% 183ms 33168KB
18 AC 100% 118ms 23792KB
19 AC 100% 31ms 14512KB
20 AC 100% 81ms 23808KB
21 AC 100% 55ms 13232KB
22 AC 100% 83ms 20144KB
23 AC 100% 90ms 20624KB
24 AC 100% 243ms 40352KB
25 AC 100% 177ms 31200KB
26 AC 100% 178ms 32880KB
27 AC 100% 48ms 15040KB
28 AC 100% 49ms 12448KB
29 AC 100% 127ms 22704KB
30 AC 100% 95ms 24368KB
31 AC 100% 228ms 36880KB
32 AC 100% 133ms 22672KB
33 AC 100% 28ms 10640KB
34 AC 100% 198ms 30032KB
35 AC 100% 24ms 10128KB
36 AC 100% 128ms 30704KB
37 AC 100% 87ms 17664KB
38 AC 100% 20ms 7952KB
39 AC 100% 194ms 40128KB
40 AC 100% 30ms 13808KB
41 AC 100% 207ms 32160KB
42 AC 100% 57ms 14464KB
43 AC 100% 238ms 36368KB
44 AC 100% 112ms 23616KB
45 AC 100% 150ms 27072KB
46 AC 100% 164ms 26256KB
47 AC 100% 208ms 34096KB
48 AC 100% 219ms 32976KB
49 AC 100% 112ms 21696KB
50 AC 100% 184ms 32576KB
51 AC 100% 50ms 11808KB
52 AC 100% 97ms 21200KB
53 AC 100% 65ms 15088KB
54 AC 100% 154ms 24240KB
55 AC 100% 34ms 14016KB
56 AC 100% 125ms 27536KB
57 AC 100% 68ms 23216KB
58 AC 100% 85ms 19216KB
59 AC 100% 44ms 15472KB
60 AC 100% 47ms 15920KB
61 AC 100% 97ms 18720KB
62 AC 100% 190ms 28256KB
63 AC 100% 146ms 32688KB
64 AC 100% 190ms 30176KB
65 AC 100% 184ms 28992KB
66 AC 100% 4ms 8640KB
67 AC 100% 104ms 24224KB
68 AC 100% 102ms 28592KB
69 AC 100% 263ms 42512KB
70 AC 100% 137ms 24368KB

ソースコード

#define _USE_MATH_DEFINES
#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
#include <array>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
#include <iterator>
#include <memory>
using namespace std;

class Edge
{
public:
    int to, cost;
    Edge(int to, int cost){
        this->to = to;
        this->cost = cost;
    }
};

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

    vector<vector<Edge> > edges(n);
    for(int i=0; i<m; ++i){
        int a, b, c;
        cin >> a >> b >> c;
        -- a;
        -- b;
        edges[a].push_back(Edge(b, c));
        edges[b].push_back(Edge(a, c));
    }

    priority_queue<pair<int, int>> pq;
    vector<int> v(n, -1);
    for(int i=0; i<k; ++i){
        int h, d;
        cin >> h >> d;
        -- h;
        pq.push(make_pair(d, h));
        v[h] = d;
    }

    while(!pq.empty()){
        int a, x;
        tie(x, a) = pq.top();
        pq.pop();
        if(x < v[a])
            continue;

        for(const Edge& e : edges[a]){
            int y = x - e.cost;
            if(y > v[e.to]){
                v[e.to] = y;
                pq.push(make_pair(y, e.to));
            }
        }
    }

    int ans = 0;
    for(int i=0; i<n; ++i){
        if(v[i] >= 0)
            ++ ans;
    }
    cout << ans << endl;

    return 0;
}