Submission #1184206

#TimeUsernameProblemLanguageResultExecution timeMemory
1184206Onur_IlgazConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
138 ms25128 KiB
#include <bits/stdc++.h> #define fast cin.tie(0)->sync_with_stdio(0); #define int long long #define inf ((int)1e18) using namespace std; int32_t main() { fast int n, m; cin >> n >> m; int s, t, l, k; cin >> s >> t >> l >> k; s--, t--; vector <vector<pair<int, int> > > adj(n); for(int i = 0; i < m; i++) { int a, b, w; cin >> a >> b >> w; a--, b--; adj[a].push_back({b, w}); adj[b].push_back({a, w}); } auto dij = [&](int st) { vector <int> dist(n, inf); vector <bool> vis(n); priority_queue <pair<int, int> > pq; pq.push({0, st}); dist[st] = 0; while(!pq.empty()) { auto [d, node] = pq.top(); d = -d; pq.pop(); if(vis[node]) continue; vis[node] = 1; for(auto [to, w]:adj[node]) { if(d + w < dist[to]) { dist[to] = d + w; pq.push({-(d + w), to}); } } } return dist; }; vector <int> from = dij(s), to = dij(t); // for(auto it:from) { // cout << it << ' '; // } // cout << '\n'; // for(auto it:to) { // cout << it << ' '; // } // cout << '\n'; if(from[t] <= k) { cout << n * (n - 1) / 2 << '\n'; return 0; } int ans = 0; sort(from.begin(), from.end()); sort(to.begin(), to.end()); k -= l; for(int i = 0; i < n; i++) { int v = k - from[i]; ans += upper_bound(to.begin(), to.end(), v) - to.begin(); } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...