Submission #1223406

#TimeUsernameProblemLanguageResultExecution timeMemory
1223406KALARRY도로 폐쇄 (APIO21_roads)C++20
0 / 100
2095 ms20332 KiB
#include <cassert> #include <cstdio> #include <vector> #include <cassert> #include <cstdio> #include <vector> #include<bits/stdc++.h> using namespace std; long long dp[100005][2]; //dp[v][0] = 0/1 -> connected with parent or not vector<pair<int,int>> adj[100005]; void dfs(int v,int p,int k) { dp[v][0] = dp[v][1] = 0; vector<long long> diffs; for(auto e : adj[v]) { int u = e.first; long long w = e.second; if(u != p) { dfs(u,v,k); dp[v][0] += dp[u][0] + w; dp[v][1] += dp[u][0] + w; diffs.push_back({dp[u][1] - w - dp[u][0]}); } } sort(diffs.begin(),diffs.end()); int L = diffs.size(); for(int j = 0 ; j < min(L,k) ; j++) { if(diffs[j] < 0) { dp[v][0] += diffs[j]; if(j != k-1) dp[v][1] += diffs[j]; } } } std::vector<long long> minimum_closure_costs(int N, std::vector<int> U, std::vector<int> V, std::vector<int> W) { for(int i = 0 ; i < N ; i++) { U[i]++; V[i]++; adj[U[i]].push_back({V[i],W[i]}); adj[V[i]].push_back({U[i],W[i]}); } vector<long long> ret; for(int k = 0 ; k <= N - 1 ; k++) { dfs(1,1,k); ret.push_back(dp[1][0]); } return ret; }
#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...