// 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> bfs(ll u) {
vector<ll> dist(n, inf);
queue<ll> q;
dist[u] = 0;
q.push(u);
while (!q.empty()) {
ll s = q.front();
q.pop();
for (auto [v, w] : adj[s]) {
if (dist[v] == inf) {
dist[v] = dist[s] + 1;
q.push(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 = bfs(s);
vector<ll> dist_t = bfs(t);
ll ans = 0;
if (dist_s[t] <= k) {
ans = n * (n - 1) / 2;
} else {
set<pair<ll,ll>> val;
for (ll u{}; u < n; u++) {
if (dist_s[u] > 1) continue;
for (ll v{}; v < n; v++) {
if (dist_t[v] > k - l - dist_s[u]) continue;
if (u < v) val.insert({u, v});
else if (v < u) val.insert({v, u});
}
}
ans = val.size();
}
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... |