#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,l,s,t,k;
const int N=1e6+5;
const long long INF=1e18;
vector<pair<int,int>> g[N];
int dist1[N],dist2[N];
void dijkstra(int src,int dist[]){
    for(int i=1;i<=n;i++) dist[i]=INF;
    dist[src]=0;
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    q.push({0,src});
    while(!q.empty()){
        int u=q.top().first;
        int v=q.top().second;
        q.pop();
        if(dist[v]<u) continue;
        for(auto& x:g[v]){
            if(dist[x.first]>dist[v]+x.second){
                dist[x.first]=dist[v]+x.second;
                q.push({dist[x.first],x.first});
            }
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;cin>>s>>t>>l>>k;
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    dijkstra(s,dist1);
    dijkstra(t,dist2);
    int K=k-l;
    if(K<0){
        cout<<0;
        return 0;
    }
    if(dist1[t]<=k){
        cout<<n*(n-1)/2;
        return 0;
    }
    vector<int> idx1(n);
    iota(idx1.begin(),idx1.end(),1);
    sort(idx1.begin(),idx1.end(),[&] (int a,int b){
       return dist1[a]<dist1[b];
    });
    vector<int> idx2=idx1 ;
    sort(idx2.begin(),idx2.end(),[&] (int a,int b){
       return dist2[a]<dist2[b];
    });
    int ans=0,j=n-1;
    for(int i=0;i<n;i++)    {
        int x=idx1[i];
        while(j>=0 and dist1[x]+dist2[idx2[j]]>K) j--;
        ans+=(j+1);
        if(j >= 0 && idx2[j] == x && dist1[x] + dist2[x] <= K) ans--;
    }
    sort(idx1.begin(),idx1.end(),[&] (int a,int b){
       return dist2[a]<dist2[b];
    });
    sort(idx2.begin(),idx2.end(),[&] (int a,int b){
       return dist1[a]<dist1[b];
    });
    j=n-1;
    for(int i=0;i<n;i++){
        int x=idx1[i];
        while(j >= 0 && dist2[x] + dist1[idx2[j]] > K) j--;
        ans += (j+1);
        if(j >= 0 && idx2[j] == x && dist1[x] + dist2[x] <= K) ans--;
    }
    cout<<ans/2;
}
| # | 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... |