結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 119ms 0KB
2 WA 0% 114ms 0KB
3 WA 0% 54ms 0KB
4 WA 0% 163ms 0KB
5 WA 0% 88ms 0KB
6 WA 0% 225ms 0KB
7 WA 0% 161ms 0KB
8 WA 0% 162ms 0KB
9 WA 0% 97ms 0KB
10 WA 0% 196ms 0KB
11 WA 0% 88ms 0KB
12 WA 0% 42ms 0KB
13 WA 0% 84ms 0KB
14 WA 0% 199ms 0KB
15 WA 0% 146ms 0KB
16 WA 0% 133ms 0KB
17 WA 0% 154ms 0KB
18 WA 0% 135ms 0KB
19 WA 0% 32ms 0KB
20 WA 0% 94ms 0KB
21 WA 0% 56ms 0KB
22 WA 0% 89ms 0KB
23 WA 0% 91ms 0KB
24 WA 0% 194ms 0KB
25 WA 0% 167ms 0KB
26 WA 0% 195ms 0KB
27 WA 0% 47ms 0KB
28 WA 0% 48ms 0KB
29 WA 0% 131ms 0KB
30 WA 0% 92ms 0KB
31 WA 0% 218ms 0KB
32 WA 0% 143ms 0KB
33 WA 0% 29ms 0KB
34 WA 0% 159ms 0KB
35 WA 0% 35ms 0KB
36 WA 0% 141ms 0KB
37 WA 0% 89ms 0KB
38 WA 0% 23ms 0KB
39 WA 0% 190ms 0KB
40 WA 0% 35ms 0KB
41 WA 0% 226ms 0KB
42 WA 0% 65ms 0KB
43 WA 0% 319ms 0KB
44 WA 0% 143ms 0KB
45 WA 0% 119ms 0KB
46 WA 0% 150ms 0KB
47 WA 0% 220ms 0KB
48 WA 0% 192ms 0KB
49 WA 0% 115ms 0KB
50 WA 0% 169ms 0KB
51 WA 0% 45ms 0KB
52 WA 0% 146ms 0KB
53 WA 0% 70ms 0KB
54 WA 0% 164ms 0KB
55 WA 0% 51ms 0KB
56 WA 0% 119ms 0KB
57 WA 0% 71ms 0KB
58 WA 0% 77ms 0KB
59 WA 0% 45ms 0KB
60 WA 0% 67ms 0KB
61 WA 0% 92ms 0KB
62 WA 0% 155ms 0KB
63 AC 100% 198ms 37712KB
64 WA 0% 158ms 0KB
65 WA 0% 159ms 0KB
66 WA 0% 19ms 0KB
67 WA 0% 89ms 0KB
68 WA 0% 94ms 0KB
69 WA 0% 256ms 0KB
70 WA 0% 122ms 0KB

ソースコード

#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(){

  struct Edge{
    int to, cost;
    Edge(int t, int 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), d(k);
  rep(i, k) cin>> h[i]>> d[i];

  int mxd=*max_element(d.begin(), d.end());
  rep(i, k) g[n].push_back(Edge{h[i]-1, mxd-d[i]});
  using i64=long long;
  i64 inf=1e18;
  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, 0}); 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.cost]});
      }
    }
  }
  auto count=[&](){
    int cnt=0;
    rep(i, n)if(dist[i]<=mxd) cnt++;
    return cnt;
  };

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