Submission #1080729

#TimeUsernameProblemLanguageResultExecution timeMemory
1080729shmaxClosing Time (IOI23_closing)C++17
0 / 100
1068 ms36068 KiB
#include "closing.h" #include "bits/stdc++.h" using namespace std; using i32 = int; #define int long long #define len(x) (int)(x.size()) #define all(x) x.begin(), x.end() #define inf 1000'000'000'000'000'000LL #define bit(x, i) (((x) >> i) & 1) template<typename T> using vec = vector<T>; i32 max_score(i32 N, i32 X, i32 Y, int K, std::vector<i32> U, std::vector<i32> V, std::vector<i32> W) { i32 ans = 0; vec<vec<pair<int, int>>> g(N); for (int i = 0; i < len(U); i++) { g[U[i]].emplace_back(V[i], W[i]); g[V[i]].emplace_back(U[i], W[i]); } auto dijkstra = [&](int start) { priority_queue<pair<int, int>, vec<pair<int, int>>, greater<>> pq; pq.emplace(0, start); vec<int> dists(N, inf); dists[start] = 0; while (!pq.empty()) { auto [cost, v] = pq.top(); pq.pop(); if (cost != dists[v]) continue; for (auto [u, w]: g[v]) { if (dists[u] > dists[v] + w) { dists[u] = dists[v] + w; pq.emplace(dists[u], u); } } } return dists; }; auto dX = dijkstra(X); auto dY = dijkstra(Y); vec<int> rg(dX); for (auto h: dY) rg.push_back(h); sort(all(rg)); int best = 0; int tK = K; for (int x: rg) { if (tK < x) break; tK -= x; best++; } { int curK = K; int cnt = 0; vec<int> to_add; for (int i = X; i <= Y; i++) { curK -= min(dX[i], dY[i]); cnt++; to_add.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i])); } for (int i = 0; i < X; i++) { to_add.push_back(min(dX[i], dY[i])); } for (int i = Y + 1; i < N; i++) { to_add.push_back(min(dX[i], dY[i])); } if (curK >= 0) { sort(all(to_add)); for (int x: to_add) { if (curK < x) break; curK -= x; cnt++; } best = max(best, cnt); } } { int curK = K; int cnt = 0; vec<int> to_add1; for (int i = X; i <= Y; i++) { curK -= min(dX[i], dY[i]); cnt++; if (dX[i] > dY[i]) { to_add1.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i])); } else { curK -= max(dX[i], dY[i]) - min(dX[i], dY[i]); cnt++; } } for (int i = Y + 1; i < N; i++) { to_add1.push_back(min(dX[i], dY[i])); } for (int i = X - 1; i >= 0; i--) { int tcnt = cnt; int tcurK = curK; if (curK < 0) break; auto to_add = to_add1; for (int j = i - 1; j >= 0; j--) { to_add.push_back(dX[j]); } sort(all(to_add)); for (int x: to_add) { if (tcurK < x) break; tcurK -= x; tcnt++; } best = max(best, tcnt); cnt += 2; curK -= dY[i]; } if (curK >= 0) { auto to_add = to_add1; sort(all(to_add)); for (int x: to_add) { if (curK < x) break; curK -= x; cnt++; } best = max(best, cnt); } } { int curK = K; int cnt = 0; vec<int> to_add1; for (int i = X; i <= Y; i++) { curK -= min(dX[i], dY[i]); cnt++; if (dX[i] < dY[i]) { to_add1.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i])); } else { curK -= max(dX[i], dY[i]) - min(dX[i], dY[i]); cnt++; } } for (int i = 0; i < X; i++) { to_add1.push_back(min(dX[i], dY[i])); } for (int i = Y + 1; i < N; i++) { int tcnt = cnt; int tcurK = curK; if (curK < 0) break; auto to_add = to_add1; for (int j = i + 1; j < N; j++) { to_add.push_back(dY[j]); } sort(all(to_add)); for (int x: to_add) { if (tcurK < x) break; tcurK -= x; tcnt++; } best = max(best, tcnt); cnt += 2; curK -= dX[i]; } if (curK >= 0) { auto to_add = to_add1; sort(all(to_add)); for (int x: to_add) { if (curK < x) break; curK -= x; cnt++; } best = max(best, cnt); } } { int curK = K; int cnt = 0; for (int i = X; i <= Y; i++) { curK -= max(dX[i], dY[i]); cnt += 2; } set<int> used; vec<pair<int, int>> tgr; for (int i = 0; i < X; i++) { tgr.emplace_back(min(dX[i], dY[i]), i); } for (int i = Y + 1; i < N; i++) { tgr.emplace_back(min(dX[i], dY[i]), i); } sort(all(tgr)); for (auto [t, id]: tgr) { vec<int> to_add; for (int i = 0; i < N; i++) { if (i >= X and i <= Y) continue; if (used.count(i)) continue; to_add.push_back(min(dX[i], dY[i])); } if (curK >= 0) { int tcnt = cnt; sort(all(to_add)); for (int x: to_add) { if (curK < x) break; curK -= x; tcnt++; } best = max(best, tcnt); } used.insert(id); curK -= max(dX[id], dY[id]); cnt += 2; } if (curK >= 0) { best = max(best, cnt); } } return best; }

Compilation message (stderr)

closing.cpp: In function 'i32 max_score(i32, i32, i32, long long int, std::vector<int>, std::vector<int>, std::vector<int>)':
closing.cpp:17:9: warning: unused variable 'ans' [-Wunused-variable]
   17 |     i32 ans = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...