Submission #1133701

#TimeUsernameProblemLanguageResultExecution timeMemory
1133701tfgsConstruction Project 2 (JOI24_ho_t2)C++17
100 / 100
178 ms24884 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector") #pragma GCC target("avx2") #define int int64_t const int inf=1e18; #ifdef LOCAL #include "algo/debug.h" #else template <typename... Args> void dummy(Args&&... args){} #define ps dummy #endif #define f first #define s second template<class T> using V = vector<T>; using vi = V<int>; using vb = V<bool>; using vs = V<string>; #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define len(x) (int)((x).size()) #define rsz resize #define ins insert #define ft front() #define bk back() #define pb push_back #define lb lower_bound #define ub upper_bound #define ai2 array<int,2> #define ai3 array<int,3> #define ai4 array<int,4> #define ai5 array<int,5> template<class T> int lwb(const V<T>& a, const T& b) { return lb(all(a),b)-begin(a); } template<class T> int upb(const V<T>& a, const T& b) { return ub(all(a),b)-begin(a); } template<class T> bool ckmin(T& a, const T& b) { return a > b ? a=b, true : false; } template<class T> bool ckmax(T& a, const T& b) { return a < b ? a=b, true : false; } #define pct __builtin_popcountll #define ctz __builtin_ctzll #define clz __builtin_clzll constexpr int p2(int x) { return (int)1 << x; } constexpr int bits(int x) { return x == 0 ? 0 : 63-clz(x); } // floor(log2(x)) template<class T>void UNIQUE(V<T>& v) { sort(all(v)); v.erase(unique(all(v)),end(v)); } template<class T,class U>void erase(T& t, const U& u) { auto it = t.find(u); assert(it != end(t)); t.erase(it); } template<class F> struct y_combinator_result { F f; template<class T> explicit y_combinator_result(T &&f): f(std::forward<T>(f)) {} template<class ...Args> decltype(auto) operator()(Args &&...args) { return f(std::ref(*this), std::forward<Args>(args)...); } }; template<class Fun> decltype(auto) yy(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); } template<class T> using pqg = priority_queue<T,vector<T>,greater<T>>; void solve() { int n, m; cin >> n >> m; int s, t, L, K; cin >> s >> t >> L >> K; s--; t--; V<V<ai2>> g(n); for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; u--; v--; g[u].pb({ v, w }); g[v].pb({ u, w }); } auto dij = [&](int s) { vi d(n, inf); d[s] = 0; pqg<ai2> q; q.push({ 0, s }); vb processed(n); while (len(q)) { auto [e, u] = q.top(); q.pop(); if (processed[u]) continue; processed[u] = true; for (auto [v, w] : g[u]) if (ckmin(d[v], e + w)) { q.push({ d[v], v }); } } return d; }; vector d = { dij(s), dij(t) }; if (d[0][t] <= K) { cout << n * (n - 1) / 2 << '\n'; return; } K -= L; auto p = d[0], q = d[1]; sort(all(p)); sort(all(q)); int ans = 0; int j = 0; for (int i = len(p) - 1; i >= 0; i--) { while (j < len(q) && p[i] + q[j] <= K) { j++; } ans += j; } cout << ans << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...