結果

提出番号 2130
提出者 ikd
言語 C++
提出日時 2018-08-04 16:16:12
問題名 (73)観光計画
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 126ms 33872KB
2 AC 100% 124ms 39216KB
3 AC 100% 70ms 22784KB
4 AC 100% 190ms 48000KB
5 AC 100% 91ms 28736KB
6 RE 100% 169ms 43760KB
7 AC 100% 183ms 51088KB
8 AC 100% 176ms 52384KB
9 AC 100% 92ms 25424KB
10 AC 100% 198ms 64208KB
11 AC 100% 107ms 29984KB
12 AC 100% 36ms 17424KB
13 AC 100% 77ms 32720KB
14 AC 100% 218ms 52992KB
15 AC 100% 165ms 46096KB
16 AC 100% 149ms 41312KB
17 AC 100% 184ms 59072KB
18 AC 100% 140ms 40704KB
19 AC 100% 31ms 23152KB
20 AC 100% 89ms 34784KB
21 AC 100% 57ms 21296KB
22 AC 100% 91ms 28304KB
23 AC 100% 89ms 29696KB
24 AC 100% 257ms 67904KB
25 AC 100% 171ms 56800KB
26 AC 100% 229ms 56576KB
27 AC 100% 52ms 19952KB
28 WA 0% 56ms 18048KB
29 AC 100% 117ms 37264KB
30 WA 0% 101ms 37264KB
31 AC 100% 264ms 63728KB
32 AC 100% 145ms 38368KB
33 AC 100% 26ms 13632KB
34 AC 100% 207ms 50480KB
35 AC 100% 29ms 12896KB
36 AC 100% 173ms 48064KB
37 AC 100% 81ms 26784KB
38 AC 100% 21ms 10240KB
39 AC 100% 261ms 61744KB
40 AC 100% 29ms 16496KB
41 AC 100% 231ms 55024KB
42 AC 100% 53ms 21584KB
43 AC 100% 263ms 64672KB
44 AC 100% 134ms 38208KB
45 AC 100% 157ms 45088KB
46 AC 100% 146ms 43184KB
47 AC 100% 232ms 55936KB
48 AC 100% 204ms 56880KB
49 AC 100% 121ms 35936KB
50 AC 100% 184ms 49568KB
51 AC 100% 49ms 17200KB
52 AC 100% 118ms 32688KB
53 AC 100% 69ms 23728KB
54 AC 100% 165ms 42576KB
55 AC 100% 38ms 18384KB
56 AC 100% 113ms 38560KB
57 AC 100% 68ms 33456KB
58 AC 100% 96ms 30960KB
59 AC 100% 51ms 26000KB
60 AC 100% 60ms 21472KB
61 AC 100% 80ms 27904KB
62 AC 100% 191ms 48464KB
63 WA 0% 159ms 46960KB
64 AC 100% 198ms 53648KB
65 AC 100% 160ms 47616KB
66 AC 100% 5ms 8576KB
67 WA 0% 112ms 38496KB
68 WA 0% 113ms 38512KB
69 AC 100% 305ms 76336KB
70 AC 100% 132ms 40128KB

ソースコード

#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
#include<queue>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)

int main(){
  using i64=long long;
  struct Edge{
    int to; i64 cost;
    Edge(int t, i64 c): to(t), cost(c){}
  };

  int n, m, k; cin>> n>> m>> k;
  vector<vector<Edge>> g(n+1);
  rep(i, m){
    int a, b, c; cin>> a>> b>> c;
    a--; b--;
    g[a].push_back(Edge{b, c});
    g[b].push_back(Edge{a, c});
  }
  vector<int> h(k);
  vector<i64> d(k);
  rep(i, k) cin>> h[i]>> d[i];

  i64 inf=1e18, mxd=1e12;
  rep(i, k) g[n].push_back(Edge{h[i]-1, mxd-d[i]});
  vector<i64> dist(n+1, inf);
  struct P{
    int v; i64 d;
    P(int v, i64 d): v(v), d(d){}
    bool operator<(const P &r)const{
      return d>r.d;
    }
  };
  priority_queue<P> q;
  q.push(P{n, 0LL}); dist[n]=0;
  while(q.size()>0){
    auto p=q.top(); q.pop();
    for(auto e: g[p.v]){
      if(dist[p.v]+e.cost<dist[e.to]){
        dist[e.to]=dist[p.v]+e.cost;
        q.push(P{e.to, dist[e.to]});
      }
    }
  }
  auto count=[&](){
    int cnt=0;
    rep(i, n)if(dist[i]<mxd) cnt++;
    return cnt;
  };

  cout<< count()<< endl;
  return 0;
}