#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
using namespace std;
const ll maxn = 2e5 + 5;
const ll inf = 1e17;
ll a[maxn];
ll n,m,s,t,l,k,u,v,w;
bool sub23 = false;
vector<pll>g[maxn];
ll dist1[maxn];
ll distn[maxn];
priority_queue<pll,vector<pll>,greater<pll>>pe;
void dijk1()
{
    for(ll i = 1;i<=n;++i)
    {
        dist1[i] = inf;
    }
    dist1[s] = 0;
    pe.push({0,s});
    while(!pe.empty())
    {
        ll u = pe.top().second;
        ll cur = pe.top().first;
        pe.pop();
        if(dist1[u] < cur)
        {
            continue;
        }
        for(pll v : g[u])
        {
            if(dist1[v.first] > dist1[u] + v.second)
            {
                dist1[v.first] = dist1[u] + v.second;
                pe.push({dist1[v.first],v.first});
            }
        }
    }
}
void dijkn()
{
    for(ll i = 1;i<=n;++i)
    {
        distn[i] = inf;
    }
    distn[t] = 0;
    pe.push({0,t});
    while(!pe.empty())
    {
        ll u = pe.top().second;
        ll cur = pe.top().first;
        pe.pop();
        if(distn[u] < cur)
        {
            continue;
        }
        for(pll v : g[u])
        {
            if(distn[v.first] > distn[u] + v.second)
            {
                distn[v.first] = distn[u] + v.second;
                pe.push({distn[v.first],v.first});
            }
        }
    }
}
void solve()
{
    cin>>n>>m>>s>>t>>l>>k;
    for(ll i = 1;i<=m;++i)
    {
        cin>>u>>v>>w;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    dijk1();
    dijkn();
    if(n <= 3000)
    {
        sub23 = true;
    }
}
void sub_23()
{
    if(dist1[t] <= k)
    {
        cout<<n*(n-1)/2;
        return;
    }
    ll ans = 0;
    for(ll i = 1;i<n;++i)
    {
        for(ll j = i + 1;j<=n;++j)
        {
            if(dist1[i] + distn[j] + l <= k || distn[i] + dist1[j] + l <= k)
            {
                ans++;
            }
        }
    }
    cout<<ans<<'\n';
}
void sub_14()
{
    if(dist1[t] <= k)
    {
        cout<<n*(n-1)/2;
        return;
    }
    ll ans = 0;
    for(ll i = 1;i<=n;++i)
    {
        if(dist1[i] + distn[i] <= k)
        {
            ans--;
        }
    }
    sort(dist1+1,dist1+n+1);
    sort(distn+1,distn+n+1);
    ll j = n;
    for(ll i = 1;i<=n;++i)
    {
        while(j >= 1 && dist1[i] + distn[j] + l > k)
        {
            j--;
        }
        ans+=j;
    }
    cout<<ans<<'\n';
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //freopen("BHNM.INP","r",stdin);
    //freopen("BHNM.OUT","w",stdout);
    ll t = 1;
    //cin>>t;
    while(t--)
    {
        solve();
        if(sub23)
        {
            sub_23();
        }
        else
        {
            sub_14();
        }
    }
    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... |