Submission #966375

#TimeUsernameProblemLanguageResultExecution timeMemory
966375VMaksimoski008Closing Time (IOI23_closing)C++17
9 / 100
1121 ms1451216 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; int n, x, y, k; vector<vector<pair<int, int> >> graph; const int maxn = 2e5 + 5; using ll = long long; ll dist[2][maxn]; void dfs(int u, int p, int t) { for(auto &[v, w] : graph[u]) { if(v == p) continue; dist[t][v] = dist[t][u] + w; dfs(v, u, t); } } int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n = N; x = X; y = Y; k = K; graph.resize(n); bool line = 1; for(int i=0; i<n-1; i++) { if(abs(U[i] - V[i]) != 1) line = 0; graph[U[i]].push_back({ V[i], W[i] }); graph[V[i]].push_back({ U[i], W[i] }); } if(line) { int ans = 0; dfs(x, x, 0); dfs(y, y, 1); for(int a=x; a<n; a++) { for(int b=x; b>=0; b--) { for(int c=y; c<n; c++) { for(int d=y; d>=0; d--) { ll total = 0; for(int i=0; i<n; i++) { ll curr = 0; if(b <= i && i <= a) curr = max(curr, dist[0][i]); if(d <= i && i <= c) curr = max(curr, dist[1][i]); total += curr; } if(total <= k) ans = max(ans, a - b + c - d); } } } } return ans + 2; } 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...
#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...