#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> v;
vector<int> depth;
vector<int> dp;
int n,maxim=0;
bool verif(int crews){
int last=crews;
for(int i=2;i<=maxim;i++){
last-=dp[i];
if(last<0)
return false;
last+=crews;
}
return true;
}
int main() {
cin>>n;
v.resize(n+1);
depth.resize(n+1);
dp.resize(n+1);
for(int i=1;i<=n-1;i++){
int a,b;
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
depth[1]=1;
queue<int> q;
q.push(1);
while(!q.empty()){
int nod = q.front(),conex=0;
q.pop();
for(int i=0;i<v[nod].size();i++){
int newnod = v[nod][i];
if(depth[newnod]==0){
depth[newnod]=depth[nod]+1;
maxim=max(maxim,depth[newnod]);
q.push(newnod);
conex++;
}
}
dp[depth[nod]]=max(dp[depth[nod]],conex);
}
int l=1,r=n,mij,corect=n;
while(l<=r){
mij=(l+r)/2;
bool res = verif(mij);
if(res==true){
corect=min(mij,corect);
r=mij-1;
}else
l=mij+1;
}
cout<<corect;
}
# | 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... |