#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int, int>
#define vi vector<int>
#define vs vector<string>
#define vb vector<bool>
#define vpi vector<pi>
#define pb push_back
#define all(a) (a).begin(), (a).end()
const int mod = 3e18;
int n, m, s, t, l, k;
const int N = 2e5 + 5;
vpi g[N];
vi dijkstra(int sc)
{
vi dist(n + 1, mod);
dist[sc] = 0;
multiset<pi> ms;
ms.insert({0, sc});
while (ms.size())
{
auto [d, v] = *ms.begin();
ms.erase(ms.begin());
for (auto ch : g[v])
{
if (d + ch.second < dist[ch.first])
{
dist[ch.first] = d + ch.second;
ms.insert({dist[ch.first], ch.first});
}
}
}
return dist;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m >> s >> t >> l >> k;
for (int i = 0; i < m; i++)
{
int a, b, c;
cin >> a >> b >> c;
g[a].pb({b, c});
g[b].pb({a, c});
}
vi a = dijkstra(s);
if (a[t] <= k)
{
cout << (n * (n - 1)) / 2 << '\n';
return 0ll;
}
vi b = dijkstra(t);
sort(all(a));
sort(all(b));
int ans = 0;
for (int i = 0; i < a.size(); i++)
{
if (a[i] + l + b[0] > k)
break;
if (a[i] + l + b[b.size() - 1] <= k)
{
ans += b.size();
continue;
}
int lt = 0, rt = b.size() - 1;
while (lt + 1 < rt)
{
int md = (lt + rt) / 2;
if (a[i] + l + b[md] <= k)
{
lt = md;
}
else
{
rt = md;
}
}
ans += (lt + 1);
}
cout << ans << '\n';
}
| # | 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... |