Submission #1319058

#TimeUsernameProblemLanguageResultExecution timeMemory
1319058BolatuluConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
239 ms30204 KiB
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; typedef long long ll; typedef long double db; #define int ll #define all(x) (x).begin(), (x).end() #define md ((tl + tr) >> 1) #define TL v + v, tl, md #define TR v + v + 1, md + 1, tr #define Tl t[v].l, tl, md #define Tr t[v].r, md + 1, tr constexpr int maxn = 1'000'007; constexpr ll inf = 1e18 + 7; constexpr ll M = 998244353; int binpow(int a, int n) { if (n == 0) return 1; if (n & 1) return a * binpow(a, n - 1) % M; int x = binpow(a, n >> 1); return x * x % M; } const int dx[4] = {-1, 0, 1, 0}; const int dy[4] = {0, 1, 0, -1}; const db eps = 0.000000000000001; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int random(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } int n, m, s, t, l, k, ds[maxn], dt[maxn]; vector<pair<int, int>> g[maxn]; void solve() { cin >> n >> m >> s >> t >> l >> k; for (int i = 1; i <= m; i++) { int a, b, c; cin >> a >> b >> c; g[a].emplace_back(b, c); g[b].emplace_back(a, c); } for (int i = 1; i <= n; i++) { ds[i] = dt[i] = inf; } set<pair<int, int>> q; ds[s] = 0; q.insert({0, s}); while (!q.empty()) { int v = q.begin()->second; q.erase(q.begin()); for (auto [to, len] : g[v]) { if (ds[v] + len < ds[to]) { q.erase({ds[to], to}); ds[to] = ds[v] + len; q.insert({ds[to], to}); } } } q.clear(); dt[t] = 0; q.insert({0, t}); while (!q.empty()) { int v = q.begin()->second; q.erase(q.begin()); for (auto [to, len] : g[v]) { if (dt[v] + len < dt[to]) { q.erase({dt[to], to}); dt[to] = dt[v] + len; q.insert({dt[to], to}); } } } if (ds[t] <= k) { cout << n * (n - 1) / 2; return; } vector<int> vs, vt; for (int i = 1; i <= n; i++) { vs.push_back(ds[i]); vt.push_back(dt[i]); } sort(all(vs)), sort(all(vt)); int ans = 0; int j = n - 1; for (int i = 0; i < n; i++) { while (j >= 0 && vs[i] + vt[j] + l > k) { j--; } ans += j + 1; } cout << ans; } signed main() { // freopen("qi.in", "r", stdin); // freopen("qi.out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int test = 1; // cin >> test; while (test--) { solve(); // cout << '\n'; } 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...