#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
vector<pair<long long,int>> adj[N];
long long dst[N],ded[N];
bool vs[N];
int n;
priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>> q;
void dijkstra(int u,long long *dist){
for(int i=1;i<=n;i++) vs[i]=false,dist[i]=1e18;
dist[u]=0;
q.push({0,u});
while(!q.empty()){
int u=q.top().second;
q.pop();
if(vs[u]) continue;
vs[u]=true;
for(pair<long long,int> tmp:adj[u]){
long long w=tmp.first;
int v=tmp.second;
if(dist[u]+w<dist[v]){
dist[v]=dist[u]+w;
q.push({dist[v],v});
}
}
}
}
int main(){
int m,s,t;
long long l,k;
cin>>n >>m >>s >>t >>l >>k;
for(int i=0;i<m;i++){
int u,v;
long long w;
cin>>u >>v >>w;
adj[u].push_back({w,v});
adj[v].push_back({w,u});
}
dijkstra(s,dst);
dijkstra(t,ded);
sort(ded+1,ded+n+1);
long long ans=0;
for(int i=1;i<=n;i++){
long long sch=k-l-dst[i];
long long tmp=upper_bound(ded+1,ded+n+1,sch)-ded;
ans+=tmp-1;
}
cout<<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... |