結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 58ms 25152KB
2 AC 100% 58ms 28768KB
3 AC 100% 29ms 18272KB
4 AC 100% 96ms 35232KB
5 AC 100% 45ms 21584KB
6 AC 100% 68ms 31840KB
7 AC 100% 79ms 35728KB
8 AC 100% 70ms 36576KB
9 AC 100% 64ms 19088KB
10 AC 100% 102ms 40736KB
11 AC 100% 50ms 22736KB
12 AC 100% 15ms 15136KB
13 AC 100% 32ms 25056KB
14 AC 100% 101ms 39008KB
15 AC 100% 75ms 30448KB
16 AC 100% 85ms 30896KB
17 AC 100% 84ms 36144KB
18 AC 100% 65ms 28128KB
19 AC 100% 13ms 14608KB
20 AC 100% 42ms 25424KB
21 AC 100% 46ms 15936KB
22 AC 100% 34ms 21952KB
23 AC 100% 39ms 23072KB
24 AC 100% 114ms 47520KB
25 AC 100% 82ms 34896KB
26 AC 100% 104ms 40304KB
27 AC 100% 23ms 16080KB
28 AC 100% 18ms 13856KB
29 AC 100% 66ms 26960KB
30 AC 100% 39ms 24912KB
31 AC 100% 95ms 42128KB
32 AC 100% 76ms 28832KB
33 AC 100% 14ms 10832KB
34 AC 100% 98ms 37504KB
35 AC 100% 13ms 10816KB
36 AC 100% 53ms 35984KB
37 AC 100% 40ms 20144KB
38 AC 100% 10ms 8720KB
39 AC 100% 115ms 46144KB
40 AC 100% 13ms 13808KB
41 AC 100% 115ms 40208KB
42 AC 100% 27ms 15920KB
43 AC 100% 116ms 43280KB
44 AC 100% 62ms 28592KB
45 AC 100% 61ms 30336KB
46 AC 100% 81ms 31872KB
47 AC 100% 98ms 42240KB
48 AC 100% 97ms 41552KB
49 AC 100% 75ms 27424KB
50 AC 100% 80ms 36240KB
51 AC 100% 22ms 13808KB
52 AC 100% 57ms 25248KB
53 AC 100% 31ms 16368KB
54 AC 100% 81ms 31920KB
55 AC 100% 18ms 14896KB
56 AC 100% 49ms 30448KB
57 AC 100% 27ms 23488KB
58 AC 100% 41ms 20848KB
59 AC 100% 22ms 15568KB
60 AC 100% 24ms 17552KB
61 AC 100% 40ms 20960KB
62 AC 100% 96ms 35408KB
63 AC 100% 58ms 34928KB
64 AC 100% 92ms 36464KB
65 AC 100% 86ms 34928KB
66 AC 100% 3ms 8736KB
67 AC 100% 51ms 24976KB
68 AC 100% 41ms 29936KB
69 AC 100% 131ms 49648KB
70 AC 100% 71ms 29840KB

ソースコード

#include <bits/stdc++.h>
using namespace std;
#define FOR(i,k,n) for(int i = (int)(k); i < (int)(n); i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(a) a.begin(), a.end()
#define MS(m,v) memset(m,v,sizeof(m))
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<string> vs;
typedef pair<int, int> pii;
const int MOD = 1e9 + 7;
template<class T> T &chmin(T &a, const T &b) { return a = min(a, b); }
template<class T> T &chmax(T &a, const T &b) { return a = max(a, b); }
template<class T>
istream& operator >> (istream& is, vector<T>& v)
{
	for (auto &i : v) is >> i;
	return is;
}
template<class T>
ostream& operator<<(ostream& os, vector<T>& v)
{
	const string delimiter = "\n";
	REP(i, v.size())
	{
		os << v[i];
		if (i != v.size() - 1) os << delimiter;
	}
	return os;
}
/*--------------------template--------------------*/

typedef int Weight;
struct Edge
{
	int from, to; Weight cost;
	bool operator < (const Edge& e) const { return cost < e.cost; }
	bool operator > (const Edge& e) const { return cost > e.cost; }
};
typedef vector<Edge> Edges;
typedef vector<Edges> Graph;
typedef vector<Weight> Array;
typedef vector<Array> Matrix;
void add_edge(Graph &g, int from, int to, Weight cost)
{
	g[from].push_back(Edge{ from, to, cost });
}

int main()
{
	cin.sync_with_stdio(false); cout << fixed << setprecision(10);
	int n, m, k;
	cin >> n >> m >> k;
	Graph g(n);
	REP(i, m)
	{
		int a, b, c; cin >> a >> b >> c;
		a--; b--;
		add_edge(g, a, b, c);
		add_edge(g, b, a, c);
	}
	vi d(n, -1);
	typedef pair<Weight, int> P;
	priority_queue<P, vector<P>, greater<P>> que;
	REP(i, k)
	{
		int a, b; cin >> a >> b;
		a--;
		d[a] = b;
		que.push(P(b, a));
	}
	while (!que.empty())
	{
		int p = que.top().first, v = que.top().second;
		que.pop();
		if (d[v] > p) continue;
		for (auto e : g[v])
		{
			int u = e.to;
			int c = e.cost;
			if (p >= c && d[u] < p - c)
			{
				d[u] = p - c;
				que.push(P(d[u], u));
			}
		}
	}
	int ans = 0;
	for (auto i : d) ans += i >= 0;
	cout << ans << endl;
	return 0;
}