제출 #1187675

#제출 시각아이디문제언어결과실행 시간메모리
1187675MatteoArcari봉쇄 시간 (IOI23_closing)C++20
0 / 100
975 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vi = vector<int>; int max_score(int n, int x, int y, ll k, vi u, vi v, vi w) { vector<vector<pair<int, ll>>> adj(n); for (int i = 0; i < n - 1; i++) { adj[u[i]].push_back({v[i], w[i]}); adj[v[i]].push_back({u[i], w[i]}); } int ans = 2; vector<vector<ll>> dst(n, vector<ll>(n)); for (int i = 0; i < n; i++) { ll sum = 0; for (int j = i + 1; j < n; j++) { dst[i][j] = dst[i][j - 1] + w[j - 1]; dst[j][i] = dst[i][j]; } } for (int i = 0; i < n; i++) { ll sum = 0; for (int j = i; j < n; j++) { sum += max(dst[j][x], dst[j][y]); if (sum > k) break; int l = i - 1, r = j + 1; ll add = 0; while (l >= x) { add += dst[l][x]; l--; } while (r <= y) { add += dst[r][y]; r++; } while (true) { if (l == -1 && r == n) { break; } if (l == -1) { if (add + sum + dst[r][y] > k) break; add += dst[r][y]; r++; } else if (r == n) { if (add + sum + dst[l][x] > k) break; add += dst[l][x]; l++; } else { if (dst[l][x] < dst[r][y]) { if (add + sum + dst[l][x] > k) break; add += dst[l][x]; l++; } else { if (add + sum + dst[r][y] > k) break; add += dst[r][y]; r++; } } } ans = max(ans, r - l - 1); } } auto proc = [&w, &n, &dst](int x) -> vector<ll> { vector<ll> dp(n + 1, 1e13); dp[0] = 0; for (int i = 0; i <= x; i++) { ll sum = 0; for (int j = i; j < n; j++) { sum += dst[j][x]; if (j < x) continue; dp[j - i + 1] = min(dp[j - i + 1], sum); } } return dp; }; vector<ll> dpX = proc(x); vector<ll> dpY = proc(y); for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { if (dpX[i] + dpY[j] <= k) { ans = max(ans, i + j); } } } return ans; }
#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...