// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back
const ll inf = 1e18;
const ll cap = 2e5+1;
ll n;
vector<pair<ll,ll>> adj[cap];
vector<ll> dijkstra(ll u) {
vector<ll> dist(n, inf);
priority_queue<pair<ll, ll>> pq;
dist[u] = 0;
pq.push({0, u});
while (!pq.empty()) {
auto [d, s] = pq.top();
d *= -1;
pq.pop();
if (d > dist[s]) continue;
for (auto [v, w] : adj[s]) {
if (dist[s] + w < dist[v]) {
dist[v] = dist[s] + w;
pq.push({-dist[v], v});
}
}
}
return dist;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll m, s, t, l, k;
cin >> n >> m >> s >> t >> l >> k;
s--; t--;
for (ll i{}; i < m; i++) {
ll a, b, c;
cin >> a >> b >> c;
a--; b--;
adj[a].eb(b, c);
adj[b].eb(a, c);
}
vector<ll> dist_s = dijkstra(s);
vector<ll> dist_t = dijkstra(t);
ll ans = 0;
for (ll u{}; u < n; u++) {
for (ll v = u + 1; v < n; v++) {
if (dist_s[u] + l + dist_t[v] <= k ||
dist_s[v] + l + dist_t[u] <= k) {
ans++;
}
}
}
cout << ans << "\n";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |