Submission #1223460

#TimeUsernameProblemLanguageResultExecution timeMemory
1223460sokratisiRoad Closures (APIO21_roads)C++20
24 / 100
2095 ms20548 KiB
#include "roads.h" #include <vector> #include <algorithm> #include <cstdio> using namespace std; vector<vector<pair<int, int>>> adj; vector<long long> ans; vector<long long> dp0, dp1; int k; void dfs(int s, int p, int w) { for (auto u: adj[s]) { if (u.first != p) dfs(u.first, s, u.second); } // printf("%d here\n", s); vector<long long> srt; for (auto u: adj[s]) { if (u.first == p) continue; srt.push_back(dp1[u.first] - dp0[u.first]); dp0[s] += dp0[u.first]; dp1[s] += dp0[u.first]; } // printf("%d here\n", s); sort(srt.begin(), srt.end()); int sz = srt.size(); int lim = min(k, sz); for (int i = 0; i < lim; i++) { if (srt[i] < 0) { dp0[s] += srt[i]; } } // printf("%d here\n", s); dp0[s] += w; lim = min(k-1, sz); for (int i = 0; i < lim; i++) { if (srt[i] < 0) { dp1[s] += srt[i]; } } } vector<long long> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w) { adj.resize(n); ans.resize(n); dp0.resize(n); dp1.resize(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]}); } // printf("here\n"); // for (int i = 0; i < n; i++) { // printf("%d: ", i); // for (auto u: adj[i]) printf("{%d, %d}\t", u.first, u.second); // printf("\n"); // } for (k = 0; k < n; k++) { // careful with k = 0 and generally with init // printf("%d\n", k); for (int i = 0; i < n; i++) { dp0[i] = 0; dp1[i] = 0; } dfs(0, 0, 0); ans[k] = min(dp0[0], dp1[0]); } 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...