#include <bits/stdc++.h>
using namespace std;
#define int long long
#define in(i) cin >> i
#define out(o) cout << o
// vector<int>
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int N, M, S, T, L, K;
in(N);
in(M);
in(S);
in(T);
in(L);
in(K);
--S;
--T;
vector<vector<pair<int, int>>> adjList(N);
for (int i = 0; i < M; ++i) {
int a, b, w;
in(a);
in(b);
in(w);
--a;
--b;
adjList[a].push_back({b, w});
adjList[b].push_back({a, w});
}
vector<int> F(N, 1e18);
vector<int> G(N, 1e18);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push({0, S});
while (!pq.empty()) {
pair<int, int> top = pq.top();
int d = top.first;
int v = top.second;
pq.pop();
if (F[v] != 1e18) continue;
F[v] = d;
for (pair<int, int> con: adjList[v]) {
if (F[con.first] == 1e18) pq.push({d + con.second, con.first});
}
}
while (!pq.empty()) pq.pop();
pq.push({0, T});
while (!pq.empty()) {
pair<int, int> top = pq.top();
int d = top.first;
int v = top.second;
pq.pop();
if (G[v] != 1e18) continue;
G[v] = d;
for (pair<int, int> con: adjList[v]) {
if (G[con.first] == 1e18) pq.push({d + con.second, con.first});
}
}
if (F[T] <= K) {
out(N * (N - 1) / 2);
return 0;
}
sort(F.begin(), F.end());
sort(G.begin(), G.end());
int ans = 0;
for (int i = 0; i < N; ++i) {
int f = F[i];
auto it = upper_bound(G.begin(), G.end(), K - L - f);
ans += it - G.begin();
}
out(ans);
}
# | 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... |