Submission #848656

#TimeUsernameProblemLanguageResultExecution timeMemory
848656eltu0815Closing Time (IOI23_closing)C++17
21 / 100
1051 ms25820 KiB
#include "closing.h" #include <bits/stdc++.h> #define MAX 200005 using namespace std; typedef long long ll; typedef pair<int, int> pii; int visited[MAX]; vector<pii> graph[MAX]; ll dist1[MAX], dist2[MAX]; void dfs1(int node) { visited[node] = 1; for(auto [v, w] : graph[node]) { if(visited[v]) continue; dist1[v] = dist1[node] + w; dfs1(v); } } void dfs2(int node) { visited[node] = 1; for(auto [v, w] : graph[node]) { if(visited[v]) continue; dist2[v] = dist2[node] + w; dfs2(v); } } ll c[MAX]; int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) { for(int i = 0; i < N; ++i) graph[i].clear(); for(int i = 0; i < N - 1; ++i) { graph[U[i]].push_back({V[i], W[i]}); graph[V[i]].push_back({U[i], W[i]}); } for(int i = 0; i < N; ++i) visited[i] = dist1[i] = 0; dfs1(X); for(int i = 0; i < N; ++i) visited[i] = dist2[i] = 0; dfs2(Y); int ans = 0; for(int p = X; p < N; ++p) for(int q = 0; q <= Y; ++q) { for(int i = 0; i < N; ++i) c[i] = 0; for(int i = X; i <= p; ++i) c[i] = max(c[i], dist1[i]); for(int i = q; i <= Y; ++i) c[i] = max(c[i], dist2[i]); ll sum = 0; int cur = p - X + Y - q + 2; for(int i = 0; i < N; ++i) sum += c[i]; if(sum > K) continue; int a = X, b = Y; while(true) { if(a == 0 && b == N - 1) break; if(a == 0) { ll val = max(0ll, dist2[b + 1] - c[b + 1]); if(sum + val <= K) sum += val, ++cur, ++b; else break; continue; } if(b == N - 1) { ll val = max(0ll, dist1[a - 1] - c[a - 1]); if(sum + val <= K) sum += val, ++cur, --a; else break; continue; } ll val1 = max(0ll, dist1[a - 1] - c[a - 1]); ll val2 = max(0ll, dist2[b + 1] - c[b + 1]); if(val1 <= val2) { if(sum + val1 <= K) sum += val1, ++cur, --a; else break; } else { if(sum + val2 <= K) sum += val2, ++cur, ++b; else break; } } ans = max(ans, cur); } return ans; } /* 2 7 0 2 10 0 1 2 0 3 3 1 2 4 2 4 2 2 5 5 5 6 3 4 0 3 20 0 1 18 1 2 1 2 3 19 */
#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...