#include <bits/stdc++.h>
#define int long long int
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define pi pair<int, int>
#define INF 1e13
using namespace std;
// remove edges going back, only consider going forward
// find distances to E at each node, then only pair if d[v] + L < d[u]
// for each u, find a v such that d[v] < d[u] - L (saves time), dd[u] + d[v] + L <= K
int N, M, S, E, L, K, ans;
vector<pi> adjlist[200010];
using namespace std;
int32_t main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> N >> M >> S >> E >> L >> K;
for (int i = 0; i < M; i++) {
int a,b,c; cin>>a>>b>>c;
adjlist[a].pb({ c, b });
adjlist[b].pb({ c, a });
}
vector<int> distS(N + 1, INF);
priority_queue<pi, vector<pi>, greater<pi>> pq1;
distS[S] = 0;
pq1.push({0,S});
while (!pq1.empty()) {
auto [d,u] = pq1.top();pq1.pop();
if(d > distS[u])continue;
for(auto [w,v]: adjlist[u]){
if(distS[u] + w >= distS[v])continue;
distS[v] = distS[u] + w;
pq1.push({distS[v],v});
}
}
vector<int> distE(N + 1, INF);
priority_queue<pi, vector<pi>, greater<pi>> pq2;
distE[E] = 0;
pq2.push({0,E});
while (!pq2.empty()) {
auto [d,u] = pq2.top();pq2.pop();
if(d > distE[u])continue;
for(auto [w,v]: adjlist[u]){
if(distE[u] + w >= distE[v])continue;
distE[v] = distE[u] + w;
pq2.push({distE[v],v});
}
}
if (distS[E] <= K) {
cout << ((N * (N - 1)) / 2) << "\n";
return 0;
}
vector<int> ls(distS), le(distE);
sort(ls.begin(), ls.end());
sort(le.begin(), le.end());
for (int i = 1; i <= N; i++) {
int stuff = (upper_bound(le.begin(), le.end(), K - L - distS[i]) - le.begin());
if (distE[i] <= K - L - distS[i]) stuff--; // comment uncomment
// cout << stuff << " ";
ans += stuff;
}
// cout << endl;
// for (int i = 1; i <= N; i++) {
// cout << i << " ";
// }
// cout << endl;
// for (int i = 1; i <= N; i++) {
// cout << distS[i] << " ";
// }
// cout << endl;
// for (int i = 1; i <= N; i++) {
// cout << distE[i] << " ";
// }
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... |