#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
bool minimize(T& a, const T& b) {
if (b < a) {a = b; return true;}
return false;
}
const int N = 1e5 + 5;
int n, m, k;
vector<ii> adj[N];
vector<ii> train_routes;
struct Node {
int u; ll d;
bool operator<(const Node& other) const {
return d > other.d;
}
};
ll dist[N];
void dijkstra(int s) {
for (int u = 1; u <= n; u++) dist[u] = LINF;
priority_queue<Node> pq;
dist[s] = 0;
pq.push({s, dist[s]});
while (!pq.empty()) {
Node front = pq.top(); pq.pop();
int u = front.u; ll d = front.d;
if (d > dist[u]) continue;
for (ii v : adj[u]) {
if (minimize(dist[v.first], dist[u] + v.second)) {
pq.push({v.first, dist[v.first]});
}
}
}
}
int in_deg[N]; // in_deg[u] = Bậc vào của u trong đồ thị đường đi ngắn nhất
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> k;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
for (int i = 0; i < k; i++) {
int v, w;
cin >> v >> w;
adj[1].push_back({v, w});
adj[v].push_back({1, w});
train_routes.push_back({v, w});
}
// Build đồ thị đường đi ngắn nhất với s = 1
dijkstra(1);
for (int u = 1; u <= n; u++) {
for (ii v : adj[u]) {
if (dist[u] + v.second == dist[v.first]) {
in_deg[v.first]++;
}
}
}
int ans = 0;
for (ii route : train_routes) {
int u = route.first, w = route.second;
if (dist[u] != w) {
ans++;
}
else {
if (in_deg[u] > 1) {
ans++;
in_deg[u]--;
}
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHthID0gYjsgcmV0dXJuIHRydWU7fQoJcmV0dXJuIGZhbHNlOyAKfQoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuLCBtLCBrOyAgCnZlY3RvcjxpaT4gYWRqW05dOwp2ZWN0b3I8aWk+IHRyYWluX3JvdXRlczsgIAoKc3RydWN0IE5vZGUgewoJaW50IHU7IGxsIGQ7IAoJYm9vbCBvcGVyYXRvcjwoY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0IHsKCQlyZXR1cm4gZCA+IG90aGVyLmQ7IAoJfQp9OyAKCQpsbCBkaXN0W05dOyAKCnZvaWQgZGlqa3N0cmEoaW50IHMpIHsKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgZGlzdFt1XSA9IExJTkY7IAoJCglwcmlvcml0eV9xdWV1ZTxOb2RlPiBwcTsgIAoJZGlzdFtzXSA9IDA7ICAKCXBxLnB1c2goe3MsIGRpc3Rbc119KTsgIAoKCXdoaWxlICghcHEuZW1wdHkoKSkgewoJCU5vZGUgZnJvbnQgPSBwcS50b3AoKTsgcHEucG9wKCk7ICAKCQlpbnQgdSA9IGZyb250LnU7IGxsIGQgPSBmcm9udC5kOyAgCgoJCWlmIChkID4gZGlzdFt1XSkgY29udGludWU7IAoKCQlmb3IgKGlpIHYgOiBhZGpbdV0pIHsKCQkJaWYgKG1pbmltaXplKGRpc3Rbdi5maXJzdF0sIGRpc3RbdV0gKyB2LnNlY29uZCkpIHsKCQkJCXBxLnB1c2goe3YuZmlyc3QsIGRpc3Rbdi5maXJzdF19KTsgCgkJCX0KCQl9Cgl9Cn0KCmludCBpbl9kZWdbTl07IC8vIGluX2RlZ1t1XSA9IELhuq1jIHbDoG8gY+G7p2EgdSB0cm9uZyDEkeG7kyB0aOG7iyDEkcaw4budbmcgxJFpIG5n4bqvbiBuaOG6pXQKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG0gPj4gazsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKCQlpbnQgdSwgdiwgdzsgCgkJY2luID4+IHUgPj4gdiA+PiB3OyAKCQlhZGpbdV0ucHVzaF9iYWNrKHt2LCB3fSk7IAoJCWFkalt2XS5wdXNoX2JhY2soe3UsIHd9KTsgCgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBrOyBpKyspIHsKCQlpbnQgdiwgdzsgCgkJY2luID4+IHYgPj4gdzsgCgkJYWRqWzFdLnB1c2hfYmFjayh7diwgd30pOyAKCQlhZGpbdl0ucHVzaF9iYWNrKHsxLCB3fSk7ICAKCQl0cmFpbl9yb3V0ZXMucHVzaF9iYWNrKHt2LCB3fSk7IAoJfQoKCS8vIEJ1aWxkIMSR4buTIHRo4buLIMSRxrDhu51uZyDEkWkgbmfhuq9uIG5o4bqldCB24bubaSBzID0gMQoJZGlqa3N0cmEoMSk7CgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJZm9yIChpaSB2IDogYWRqW3VdKSB7CgkJCWlmIChkaXN0W3VdICsgdi5zZWNvbmQgPT0gZGlzdFt2LmZpcnN0XSkgewoJCQkJaW5fZGVnW3YuZmlyc3RdKys7IAoJCQl9CgkJfQoJfQoKCWludCBhbnMgPSAwOyAgCglmb3IgKGlpIHJvdXRlIDogdHJhaW5fcm91dGVzKSB7CgkJaW50IHUgPSByb3V0ZS5maXJzdCwgdyA9IHJvdXRlLnNlY29uZDsgIAoJCWlmIChkaXN0W3VdICE9IHcpIHsKCQkJYW5zKys7IAoJCX0KCQllbHNlIHsKCQkJaWYgKGluX2RlZ1t1XSA+IDEpIHsKCQkJCWFucysrOyAKCQkJCWluX2RlZ1t1XS0tOyAKCQkJfQoJCX0KCX0KCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==