#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> v;
vector<int> depth;
int n;
bool bfs(int crews){
vector<int> checked(n+1);
checked[1]=1;
int left = 0,lastday=0;
queue<int> q;
q.push(1);
while(!q.empty()){
int nod = q.front();
if(depth[nod]>lastday){
lastday++;
left+=crews;
}
q.pop();
for(int i=0;i<v[nod].size();i++){
int newnod = v[nod][i];
if(checked[newnod]==0){
checked[newnod]=1;
q.push(newnod);
left--;
if(left<0)
return false;
}
}
}
return true;
}
int main() {
cin>>n;
v.resize(n+1);
depth.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();
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;
q.push(newnod);
}
}
}
int l=1,r=n,mij,corect;
while(l<=r){
mij=(l+r)/2;
bool res = bfs(mij);
if(res==true){
corect=mij;
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... |