Submission #1164580

#TimeUsernameProblemLanguageResultExecution timeMemory
1164580tw20000807Road Closures (APIO21_roads)C++20
0 / 100
2093 ms24880 KiB
#include "roads.h" #include<bits/stdc++.h> using namespace std; vector<long long> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w){ #define all(v) v.begin(), v.end() #define int long long #define pii pair<int, int> #define X first #define Y second #define SZ(s) ((int)s.size()) vector< vector< pii > > g(n); vector< int > ans(n); for(int i = 0; i < n - 1; ++i){ g[u[i]].push_back({v[i], w[i]}); g[v[i]].push_back({u[i], w[i]}); } vector< int > ord(n); iota(all(ord), 0); sort(all(ord), [&](int a, int b){ return SZ(g[a]) > SZ(g[b]); }); for(int k = 0; k < n; ++k){ map<int, int> vis, take; for(auto &id : ord){ if(SZ(g[id]) <= k) break; take[id] = SZ(g[id]) - k; } auto dfs = [&](auto dfs, int cur, int par, int d = 0) -> void { vis[cur] = 1; for(auto &[nxt, w] : g[cur]) if(!vis[nxt] && SZ(g[nxt]) > k) { dfs(dfs, nxt, cur, w); if(take[nxt] && take[cur]){ --take[nxt]; --take[cur]; ++ans[k]; } } }; for(auto &id : ord){ if(SZ(g[id]) <= k) break; if(!vis[id]) dfs(dfs, id, id); ans[k] += take[id]; } } return ans; } /* 5 0 1 1 0 2 1 0 3 1 0 4 1 */
#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...