結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 120ms 41168KB
2 AC 100% 144ms 45216KB
3 AC 100% 69ms 27776KB
4 AC 100% 187ms 55184KB
5 AC 100% 101ms 37568KB
6 AC 100% 164ms 51728KB
7 AC 100% 176ms 53744KB
8 AC 100% 171ms 53216KB
9 AC 100% 80ms 34416KB
10 AC 100% 244ms 67472KB
11 AC 100% 90ms 36848KB
12 AC 100% 35ms 22384KB
13 AC 100% 90ms 34592KB
14 AC 100% 210ms 58448KB
15 AC 100% 159ms 48832KB
16 AC 100% 162ms 49456KB
17 AC 100% 191ms 60928KB
18 AC 100% 141ms 46720KB
19 AC 100% 35ms 27312KB
20 AC 100% 100ms 37120KB
21 AC 100% 57ms 30272KB
22 AC 100% 82ms 33776KB
23 AC 100% 101ms 34848KB
24 AC 100% 249ms 69168KB
25 AC 100% 183ms 60240KB
26 AC 100% 214ms 61056KB
27 AC 100% 50ms 25920KB
28 AC 100% 47ms 26480KB
29 AC 100% 139ms 44688KB
30 AC 100% 92ms 38928KB
31 AC 100% 227ms 67168KB
32 AC 100% 139ms 46400KB
33 AC 100% 33ms 21056KB
34 AC 100% 171ms 56928KB
35 AC 100% 31ms 20544KB
36 AC 100% 169ms 50128KB
37 AC 100% 77ms 33520KB
38 AC 100% 22ms 19200KB
39 AC 100% 295ms 62800KB
40 AC 100% 33ms 21200KB
41 AC 100% 221ms 61056KB
42 AC 100% 53ms 28464KB
43 AC 100% 261ms 69520KB
44 AC 100% 141ms 44064KB
45 AC 100% 152ms 48928KB
46 AC 100% 159ms 49776KB
47 AC 100% 226ms 61408KB
48 AC 100% 229ms 63024KB
49 AC 100% 110ms 43856KB
50 AC 100% 191ms 52032KB
51 AC 100% 49ms 25536KB
52 AC 100% 121ms 39488KB
53 AC 100% 69ms 30368KB
54 AC 100% 163ms 50960KB
55 AC 100% 45ms 24064KB
56 AC 100% 131ms 39984KB
57 AC 100% 71ms 34512KB
58 AC 100% 88ms 36608KB
59 AC 100% 47ms 30336KB
60 AC 100% 61ms 27536KB
61 AC 100% 81ms 33776KB
62 AC 100% 203ms 55680KB
63 AC 100% 165ms 47424KB
64 AC 100% 199ms 58720KB
65 AC 100% 180ms 53056KB
66 AC 100% 6ms 15920KB
67 AC 100% 95ms 40992KB
68 AC 100% 118ms 39088KB
69 AC 100% 301ms 77936KB
70 AC 100% 129ms 46496KB

ソースコード

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct edge{
  ll to,cost;
  edge(ll to,ll cost) : to(to), cost(cost) {}
};

ll N,M,K;
vector< ll > d,h;
vector< edge > G[100005];


int main(){
  cin>>N>>M>>K;
  for(int i=0;i<M;i++){
    ll a,b,c;
    cin>>a>>b>>c;
    a--,b--;
    G[a].push_back( edge(b,c) );
    G[b].push_back( edge(a,c) );
  }
  
  h.resize(K);
  d.resize(K);

  const ll tmp = (1LL<<30);
  
  for(int i=0;i<K;i++){
    cin>>h[i]>>d[i];
    h[i]--;

    G[ N ].push_back( (edge){ h[i], tmp - d[i] } );
  }

  vector<ll> dist( N+1 , (1LL<<60) );
  dist[ N ] = 0;
  typedef pair<ll,ll> P;
  priority_queue< P , vector<P> , greater<P> > Q;
  Q.push( P(0,N) );
  while(!Q.empty()){
    P p=Q.top();
    Q.pop();
    ll pos=p.second;
    ll cost=p.first;
    if( dist[pos] < cost )continue;
    for(int i=0;i<(int)G[pos].size();i++){
      edge e=G[pos][i];
      if( cost + e.cost < dist[ e.to ] ){
        dist[ e.to ] = cost + e.cost;
        Q.push( P( dist[e.to] , e.to ) );
      }
    }
  }

  ll ans=0;
  for(int i=0;i<N;i++)
    if( dist[i] <= tmp )ans++;
  cout<<ans<<endl;
  return 0;
}