Submission #975911

#TimeUsernameProblemLanguageResultExecution timeMemory
975911NamkhingClosing Time (IOI23_closing)C++17
0 / 100
1063 ms125192 KiB
#include "closing.h" #include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define ll long long using namespace std; typedef pair<int, int> pii; const int inf = 1e9; void dfs(int u, int p, vector<vector<pii>> &adj, vector<ll> &d, ll dis = 0) { d[u] = dis; for (pii x : adj[u]) { int v = x.first; int w = x.second; if (v != p) { dfs(v, u, adj, d, dis + w); } } } int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W) { vector<vector<pii>> 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]}); } vector<ll> dx(N), dy(N); dfs(X, -1, adj, dx); dfs(Y, -1, adj, dy); vector<vector<ll>> c(N, vector<ll>(2)); ll sum = 0; for (int i = 0; i < N; i++) { if (dx[i] > dy[i]) { swap(dx[i], dy[i]); } sum += dy[i]; } K = min(K, sum); vector<int> dp(K + 1, -inf); dp[0] = 0; for (int i = 0; i < N; i++) { for (int j = K; j >= 0; j--) { if (j >= dx[i]) { dp[j] = max(dp[j], dp[j - dx[i]] + 1); } if (j >= dy[i]) { dp[j] = max(dp[j], dp[j - dy[i]] + 2); } } } int ans = 0; for (int i = 0; i <= K; i++) { ans = max(ans, dp[i]); } 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...