#include<bits/stdc++.h>
using namespace std;
const int N = 3e5;
vector <int> e[N];
int deg[N], dp[N];
bool ok = 1;
void dfs(int x, int node, int p = -1){
int rem = x;
for(auto i : e[node]){
if(i == p)continue;
dfs(x, i, node);
rem-=dp[i];
rem--;
}
dp[node] = max(-rem, 0);
}
void chk(int x){
dfs(x, 0, -1);
if(dp[0] != 0)ok = 0;
}
int main(){
int n;
cin>>n;
for(int i = 0;i < n - 1;i++){
int u, w;
cin>>u>>w;
u--;w--;
e[u].push_back(w);
e[w].push_back(u);
deg[u]++;
deg[w]++;
}
int l = 0, r = n;
while(l != r){
int mij = (l + r)/2;
ok = 1;
chk(mij);
if(ok == 0)l = mij + 1;
else r = mij;
}
cout<<l<<'\n';
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... |