Submission #1164577

#TimeUsernameProblemLanguageResultExecution timeMemory
1164577tw20000807도로 폐쇄 (APIO21_roads)C++20
0 / 100
192 ms17756 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; auto dfs = [&](auto dfs, int cur, int par, int d = 0) -> int { vis[cur] = 1; int ret = SZ(g[cur]) - k; for(auto &[nxt, w] : g[cur]) if(!vis[nxt] && SZ(g[nxt]) > k) { ret -= dfs(dfs, nxt, cur, w); } ans[k] += ret; if(cur != par && ret > 0){ return 1; } return 0; }; for(auto &id : ord){ if(SZ(g[id]) <= k) break; if(!vis[id]) dfs(dfs, id, 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...