| 提出番号 | 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;
}