#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |