結果

提出番号 1592
提出者 Pulmn
言語 C++
提出日時 2018-08-04 13:13:45
問題名 (73)観光計画
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 105ms 23872KB
2 AC 100% 142ms 29440KB
3 AC 100% 67ms 20144KB
4 AC 100% 181ms 32352KB
5 AC 100% 100ms 19216KB
6 AC 100% 162ms 30080KB
7 AC 100% 177ms 39104KB
8 AC 100% 210ms 41920KB
9 AC 100% 127ms 15920KB
10 AC 100% 223ms 48192KB
11 AC 100% 104ms 21824KB
12 AC 100% 31ms 16352KB
13 AC 100% 87ms 28592KB
14 AC 100% 210ms 37728KB
15 AC 100% 153ms 38368KB
16 AC 100% 128ms 26288KB
17 AC 100% 190ms 48736KB
18 AC 100% 143ms 30160KB
19 AC 100% 36ms 23424KB
20 AC 100% 113ms 31904KB
21 AC 100% 55ms 13440KB
22 AC 100% 89ms 22752KB
23 AC 100% 82ms 23488KB
24 AC 100% 261ms 52256KB
25 AC 100% 263ms 44592KB
26 AC 100% 209ms 39504KB
27 AC 100% 48ms 17168KB
28 AC 100% 51ms 13504KB
29 AC 100% 135ms 26272KB
30 AC 100% 94ms 33696KB
31 AC 100% 260ms 49424KB
32 AC 100% 137ms 25520KB
33 AC 100% 30ms 12720KB
34 AC 100% 192ms 34832KB
35 AC 100% 26ms 11696KB
36 AC 100% 176ms 36224KB
37 AC 100% 90ms 20736KB
38 AC 100% 17ms 8672KB
39 AC 100% 241ms 46688KB
40 AC 100% 27ms 15376KB
41 AC 100% 209ms 37824KB
42 AC 100% 59ms 18000KB
43 AC 100% 241ms 48320KB
44 AC 100% 135ms 28160KB
45 AC 100% 148ms 35488KB
46 AC 100% 154ms 30416KB
47 AC 100% 217ms 37232KB
48 AC 100% 219ms 38720KB
49 AC 100% 122ms 23488KB
50 AC 100% 189ms 38912KB
51 AC 100% 48ms 12720KB
52 AC 100% 121ms 23008KB
53 AC 100% 60ms 20080KB
54 AC 100% 186ms 26768KB
55 AC 100% 43ms 16976KB
56 AC 100% 128ms 32032KB
57 AC 100% 72ms 31264KB
58 AC 100% 80ms 25520KB
59 AC 100% 54ms 26512KB
60 AC 100% 60ms 18096KB
61 AC 100% 89ms 22768KB
62 AC 100% 191ms 33040KB
63 AC 100% 153ms 40048KB
64 AC 100% 197ms 38400KB
65 AC 100% 175ms 34688KB
66 AC 100% 4ms 9584KB
67 AC 100% 97ms 34720KB
68 AC 100% 115ms 33136KB
69 AC 100% 274ms 56896KB
70 AC 100% 143ms 28192KB

ソースコード

#include <bits/stdc++.h>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<long double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-6;
const ll mod=1e9+7;
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

class Graph{
	private:
	int n;
	vvp g;
	public:
	vl DIJ(int s){
		priority_queue<pll> q;
		vl d(n,INF);
		d[s]=0;
		q.push({0,s});
		while(!q.empty()){
			pll p=q.top();
			q.pop();
			ll v=p.second;
			if(d[v]<-p.first) continue;
			for(auto i:g[v]){
				ll u=i.first,D=d[v]+i.second;
				if(d[u]>D){
					d[u]=D;
					q.push({-D,u});
				}
			}
		}
		return d;
	}
	Graph(int v){
		n=v;
		g=vvp(v);
	}
	void add_edge(int s,int t,int c){
		g[s].push_back({t,c});
		g[t].push_back({s,c});
	}
};

int n,m,k;
vi a,b;

int main(){
	cin>>n>>m>>k;
	Graph g(n+1);
	a=b=vi(k);
	for(int i=0;i<m;i++){
		int u,v,c;
		cin>>u>>v>>c;
		g.add_edge(u,v,c);
	}
	int M=0;
	for(int i=0;i<k;i++){
		cin>>a[i]>>b[i];
		M=max(M,b[i]);
	}
	for(int i=0;i<k;i++) g.add_edge(0,a[i],M-b[i]);
	vl d=g.DIJ(0);
	int res=0;
	for(int i=1;i<=n;i++) if(d[i]<=M) res++;
	cout<<res<<endl;
}