제출 #1144067

#제출 시각아이디문제언어결과실행 시간메모리
1144067db_123새로운 문제 (POI13_luk)C++20
90 / 100
829 ms27808 KiB
#include <iostream> #include <vector> #include <functional> using namespace std; int n; vector<vector<int>> graph; void read() { cin >> n; graph.resize(n + 1); for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; graph[a].emplace_back(b); graph[b].emplace_back(a); } } bool check(int mid) { vector<int> dp(n + 1); function<void(int, int)> dfs; dfs = [&mid, &dp, &dfs](int node, int par) -> void { int cnt = 0; for (auto it : graph[node]) { if (it == par) { continue; } cnt ++; dfs(it, node); } for (auto it : graph[node]) { if (it == par) { continue; } dp[node] += dp[it]; } dp[node] -= mid - cnt; dp[node] = max(dp[node], 0); }; dfs(1, 0); return dp[1] == 0; } void solve() { int l = 1, r = n, mid, rsBs = -1; while (l <= r) { mid = l + (r - l) / 2; if (check(mid)) { rsBs = mid; r = mid - 1; } else { l = mid + 1; } } cout << rsBs; } int main() { read(); solve(); return 0; }
#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...