結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 122ms 0KB
2 WA 0% 132ms 0KB
3 WA 0% 53ms 0KB
4 WA 0% 161ms 0KB
5 WA 0% 102ms 0KB
6 WA 0% 154ms 0KB
7 WA 0% 165ms 0KB
8 WA 0% 157ms 0KB
9 WA 0% 95ms 0KB
10 WA 0% 204ms 0KB
11 WA 0% 87ms 0KB
12 WA 0% 35ms 0KB
13 WA 0% 76ms 0KB
14 WA 0% 200ms 0KB
15 WA 0% 118ms 0KB
16 WA 0% 152ms 0KB
17 WA 0% 172ms 0KB
18 WA 0% 117ms 0KB
19 WA 0% 34ms 0KB
20 WA 0% 80ms 0KB
21 WA 0% 56ms 0KB
22 WA 0% 91ms 0KB
23 WA 0% 92ms 0KB
24 WA 0% 226ms 0KB
25 WA 0% 169ms 0KB
26 WA 0% 202ms 0KB
27 WA 0% 52ms 0KB
28 WA 0% 56ms 0KB
29 WA 0% 111ms 0KB
30 WA 0% 89ms 0KB
31 WA 0% 192ms 0KB
32 WA 0% 117ms 0KB
33 WA 0% 29ms 0KB
34 WA 0% 215ms 0KB
35 WA 0% 40ms 0KB
36 WA 0% 132ms 0KB
37 WA 0% 89ms 0KB
38 WA 0% 28ms 0KB
39 WA 0% 201ms 0KB
40 WA 0% 32ms 0KB
41 WA 0% 215ms 0KB
42 WA 0% 55ms 0KB
43 WA 0% 224ms 0KB
44 WA 0% 131ms 0KB
45 WA 0% 140ms 0KB
46 WA 0% 136ms 0KB
47 WA 0% 206ms 0KB
48 WA 0% 215ms 0KB
49 WA 0% 112ms 0KB
50 WA 0% 175ms 0KB
51 WA 0% 45ms 0KB
52 WA 0% 103ms 0KB
53 WA 0% 64ms 0KB
54 WA 0% 163ms 0KB
55 WA 0% 46ms 0KB
56 WA 0% 120ms 0KB
57 WA 0% 65ms 0KB
58 WA 0% 73ms 0KB
59 WA 0% 43ms 0KB
60 WA 0% 61ms 0KB
61 WA 0% 88ms 0KB
62 WA 0% 181ms 0KB
63 AC 100% 148ms 37696KB
64 WA 0% 166ms 0KB
65 WA 0% 163ms 0KB
66 WA 0% 12ms 0KB
67 WA 0% 88ms 0KB
68 WA 0% 92ms 0KB
69 WA 0% 248ms 0KB
70 WA 0% 141ms 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;
    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;
}