#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define sz(x) ((int)x.size())
#define all(a) (a).begin(), (a).end()
#define inpvi(a, n) vi a(n); for(auto &i : a) cin >> i;
using vi = vector<int>;
using pii = pair<int, int>;
int iceil(int a, int b)
{
return (a+b-1)/b;
}
bool chmin(int &a, int b)
{
bool r = a > b;
a = min(a,b);
return r;
}
const int inf = numeric_limits<int>::max();
int n,m;
vector<vector<pair<int,int>>> adj;
int s,t,l,k;
vi dijkstra(int s)
{
vi d(n, inf);
d[s] = 0;
priority_queue<pii, vector<pii>, greater<pii>> q;
q.push({0, s});
while(!q.empty())
{
auto [d_v, v] = q.top();
q.pop();
if(d_v != d[v]) continue;
for(auto [to, len] : adj[v])
{
if(d[v] + len < d[to])
{
d[to] = d[v] + len;
q.push({d[to], to});
}
}
}
return d;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
cin >> s >> t >> l >> k;
--s;--t;
adj.resize(n);
for(int i = 0; i < m; ++i)
{
int a,b,c;
cin >> a >> b >> c;
--a;--b;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
vi d1 = dijkstra(s);
vi d2 = dijkstra(t);
if(d1[t] <= k)
{
cout << n*(n-1)/2;
return 0;
}
if(l > k)
{
cout << 0;
return 0;
}
//for(auto &i : d) cerr << i << '\n';
int ans = 0;
for(int i = 0; i < n; ++i)
{
if(d1[i] <= k - l) ++ans;
if(d2[i] <= k - l) ++ans;
}
cout << ans-1;
}
| # | 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... |