#include <bits/stdc++.h>
using namespace std;
const int NMAX = 3e5;
int dp[NMAX + 1];
vector<int> G[NMAX + 1];
void dfs(int node, int p, int val) {
dp[node] = 0;
for(auto next : G[node]) {
if(next != p) {
dp[node] += dp[next] + 1;
}
}
dp[node] = max(dp[node] - val, 0);
}
int main() {
int n;
cin >> n;
for(int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
int st = 1;
int dr = n;
int sol = n;
while(st <= dr) {
int mid = (st + dr) / 2;
dfs(1, 0, mid);
if(dp[1] == 0) {
sol = mid;
dr = mid - 1;
} else {
st = mid + 1;
}
}
cout << sol;
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... |