| 提出番号 | 1996 |
|---|---|
| 提出者 | tubuann |
| 言語 | C++ |
| 提出日時 | 2018-08-04 14:51:57 |
| 問題名 | (73)観光計画 |
| 結果 | AC |
| 点数 | 100% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 100% | 123ms | 33056KB |
| 2 | AC | 100% | 121ms | 38368KB |
| 3 | AC | 100% | 65ms | 22688KB |
| 4 | AC | 100% | 195ms | 47296KB |
| 5 | AC | 100% | 99ms | 28384KB |
| 6 | AC | 100% | 159ms | 42896KB |
| 7 | AC | 100% | 192ms | 49184KB |
| 8 | AC | 100% | 176ms | 50240KB |
| 9 | AC | 100% | 78ms | 25424KB |
| 10 | AC | 100% | 198ms | 61104KB |
| 11 | AC | 100% | 105ms | 29712KB |
| 12 | AC | 100% | 37ms | 17616KB |
| 13 | AC | 100% | 90ms | 31776KB |
| 14 | AC | 100% | 206ms | 51840KB |
| 15 | AC | 100% | 169ms | 43152KB |
| 16 | AC | 100% | 150ms | 40736KB |
| 17 | AC | 100% | 190ms | 55200KB |
| 18 | AC | 100% | 148ms | 39008KB |
| 19 | AC | 100% | 37ms | 21424KB |
| 20 | AC | 100% | 85ms | 33328KB |
| 21 | AC | 100% | 57ms | 21248KB |
| 22 | AC | 100% | 92ms | 27824KB |
| 23 | AC | 100% | 84ms | 29408KB |
| 24 | AC | 100% | 229ms | 66080KB |
| 25 | AC | 100% | 194ms | 53520KB |
| 26 | AC | 100% | 221ms | 54880KB |
| 27 | AC | 100% | 52ms | 19536KB |
| 28 | AC | 100% | 53ms | 18064KB |
| 29 | AC | 100% | 144ms | 36528KB |
| 30 | AC | 100% | 93ms | 34848KB |
| 31 | AC | 100% | 256ms | 60800KB |
| 32 | AC | 100% | 119ms | 37808KB |
| 33 | AC | 100% | 29ms | 13744KB |
| 34 | AC | 100% | 196ms | 49552KB |
| 35 | AC | 100% | 29ms | 13024KB |
| 36 | AC | 100% | 183ms | 48112KB |
| 37 | AC | 100% | 87ms | 26432KB |
| 38 | AC | 100% | 18ms | 10128KB |
| 39 | AC | 100% | 212ms | 60592KB |
| 40 | AC | 100% | 31ms | 16496KB |
| 41 | AC | 100% | 216ms | 53632KB |
| 42 | AC | 100% | 52ms | 20832KB |
| 43 | AC | 100% | 256ms | 62032KB |
| 44 | AC | 100% | 134ms | 37824KB |
| 45 | AC | 100% | 132ms | 42720KB |
| 46 | AC | 100% | 163ms | 42368KB |
| 47 | AC | 100% | 234ms | 55584KB |
| 48 | AC | 100% | 235ms | 55440KB |
| 49 | AC | 100% | 128ms | 35904KB |
| 50 | AC | 100% | 157ms | 48224KB |
| 51 | AC | 100% | 49ms | 17200KB |
| 52 | AC | 100% | 123ms | 32640KB |
| 53 | AC | 100% | 60ms | 22368KB |
| 54 | AC | 100% | 140ms | 42224KB |
| 55 | AC | 100% | 47ms | 17936KB |
| 56 | AC | 100% | 129ms | 38816KB |
| 57 | AC | 100% | 62ms | 31680KB |
| 58 | AC | 100% | 90ms | 29392KB |
| 59 | AC | 100% | 53ms | 23520KB |
| 60 | AC | 100% | 64ms | 21520KB |
| 61 | AC | 100% | 90ms | 26960KB |
| 62 | AC | 100% | 193ms | 47312KB |
| 63 | AC | 100% | 143ms | 45584KB |
| 64 | AC | 100% | 173ms | 51232KB |
| 65 | AC | 100% | 181ms | 46320KB |
| 66 | AC | 100% | 5ms | 8576KB |
| 67 | AC | 100% | 100ms | 35408KB |
| 68 | AC | 100% | 101ms | 37584KB |
| 69 | AC | 100% | 298ms | 72784KB |
| 70 | AC | 100% | 144ms | 39856KB |
#include<iomanip>
#include<limits>
#include<thread>
#include<utility>
#include<iostream>
#include<string>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<numeric>
#include<cassert>
#include<random>
#include<chrono>
#include<unordered_map>
#include<list>
using namespace std;
typedef unsigned long long int ull;
typedef long long int ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pi;
typedef pair<double,double> pd;
typedef pair<double,ll> pdl;
#define F first
#define S second
#define MK make_pair
const ll E=1e18+7;
const ll MOD=1000000007;
template<typename T>
class Dijkstra{
private:
typedef pair<T,ll> edge; //cost,to
typedef edge node;
typedef pair<T,vector<ll>> pass;
template<typename U>
vector<U> pls(vector<U> a,vector<U> b){
for(int i=0;i<b.size();i++){a.push_back(b[i]);}
return a;
}
template<typename U>
vector<U> pls(vector<U> a,U b){
a.push_back(b);
return a;
}
ll v;
vector<vector<edge>> E;
T err;
public:
Dijkstra(ll v,T err):v(v),err(err){E.resize(v);}
void add_edge(ll from,ll to,T cost){
E[from].push_back({cost,to});
}
//MLE注意
pass pass_search(ll root,ll to){
return pass_search(root)[to];
}
//MLE注意
vector<pass> pass_search(ll root){
vector<pass> ret(v,{err,vector<ll>()});
ret[root]={0,{root}};
priority_queue<node,vector<node>,greater<node>> q;
q.push({0,root});
vector<bool> used(v,false);
while(!q.empty()){
node where=q.top();
q.pop();
if(used[where.S]){continue;}
used[where.S]=true;
for(int i=0;i<E[where.S].size();i++){
if(ret[E[where.S][i].S].F>where.F+E[where.S][i].F){
ret[E[where.S][i].S].F=where.F+E[where.S][i].F;
ret[E[where.S][i].S].S=pls(ret[where.S].S,where.S);
q.push({ret[E[where.S][i].S].F,E[where.S][i].S});
}
}
}
return ret;
}
vector<T> search(ll root){
vector<T> ret(v,err);
ret[root]=0;
priority_queue<node,vector<node>,greater<node>> q;
q.push({0,root});
vector<bool> used(v,false);
while(!q.empty()){
node where=q.top();
q.pop();
if(used[where.S]){continue;}
used[where.S]=true;
for(int i=0;i<E[where.S].size();i++){
if(ret[E[where.S][i].S]>where.F+E[where.S][i].F){
ret[E[where.S][i].S]=where.F+E[where.S][i].F;
q.push({ret[E[where.S][i].S],E[where.S][i].S});
}
}
}
return ret;
}
T search(ll root,ll to){return search(root)[to];}
};
int main(){
ll n,m,k;
cin>>n>>m>>k;
Dijkstra<ll> D(n+1,E);
for(int i=0;i<m;i++){
ll a,b,c;
cin>>a>>b>>c;
D.add_edge(a,b,c);
D.add_edge(b,a,c);
}
for(int i=0;i<k;i++){
ll w,c;
cin>>w>>c;
D.add_edge(0,w,-1*c);
}
vector<ll> ans=D.search(0);
ll count=0;
for(int i=1;i<=n;i++){
if(ans[i]<=0){count++;}
}
cout<<count<<endl;
return 0;
}