//vmaskimoski
#include <bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
int32_t main() {
    ios_base::sync_with_stdio(false);
    cout.tie(0); cin.tie(0);
    int n, m, s, t, L, k, ans = 0;
    cin >> n >> m >> s >> t >> L >> k;
    vector<pii> graph[n+1];
    for(int i=0; i<m; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        graph[a].push_back({ b, w });
        graph[b].push_back({ a, w });
    }
    auto dijkstra = [&](int start) {
        vector<bool> vis(n+1);
        vector<ll> dist(n+1, 1e18);
        priority_queue<pll, vector<pll>, greater<pll> > pq;
        dist[start] = 0;
        pq.push({ 0, start });
        while(!pq.empty()) {
            int u = pq.top().second; pq.pop();
            if(vis[u]) continue;
            vis[u] = 1;
            for(auto &[v, w] : graph[u]) {
                if(dist[v] > dist[u] + w) {
                    dist[v] = dist[u] + w;
                    pq.push({ dist[v], v });
                }
            }
        }
        return dist;
    };
    vector<ll> D1 = dijkstra(s);
    vector<ll> D2 = dijkstra(t);
    if(D1[t] <= k) {
        cout << 1ll * n * (n - 1) / 2 << '\n';
        return 0;
    }
    vector<pll> D;
    for(int i=1; i<=n; i++) D.push_back({ D2[i], D1[i] });
    sort(D.begin(), D.end());
    for(int i=1; i<n; i++) {
        int l=0, r=i-1, p=-1;
        while(l <= r) {
            int mid = (l + r) / 2;
            if(D[i].second + L + D[mid].first <= k) p = mid, l = mid + 1;
            else r = mid - 1;
        }
        ans += p + 1;
    }
    cout << ans << '\n';
    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... |