Submission #1323319

#TimeUsernameProblemLanguageResultExecution timeMemory
1323319zyntherixConstruction Project 2 (JOI24_ho_t2)C++20
53 / 100
2095 ms30172 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...