#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
#define pii pair<int, int>
#define ff first
#define ss second
#define entire(x) (x).begin(), (x).end()
const int inf = 9e17;
int32_t main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
int n, m; cin >> n >> m;
int source, sink, l, k; cin >> source >> sink >> l >> k;
vector<vector<pii>> adj(n); source--, sink--;
for (int i = 0; i < m; i++){
int u, v, w; cin >> u >> v >> w; u--, v--;
adj[u].push_back(pii{v, w}); adj[v].push_back(pii{u, w});
}
auto dijkstra = [&](int s, vector<int>& dist){
fill(entire(dist), inf);
priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push(pii{0, s});
while (!pq.empty()){
auto [d, u] = pq.top(); pq.pop();
if (dist[u] != inf) continue;
else dist[u] = d;
for (auto [v, w] : adj[u]) pq.push(pii{d + w, v});
}
};
vector<int> s(n), t(n);
dijkstra(source, s); dijkstra(sink, t);
if (s[sink] <= k) { cout << (n * (n-1)) / 2 << endl; return 0; }
int ans = 0;
for (int u = 0; u < n; u++) for (int v = u + 1; v < n; v++){
int d = min(s[u] + t[v], s[v] + t[u]) + l;
if (d <= k) ans++;
}
cout << ans << endl;
return 0;
}
| # | 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... |