Submission #1143403

#TimeUsernameProblemLanguageResultExecution timeMemory
1143403calisovraduTriumphal arch (POI13_luk)C++20
20 / 100
163 ms19676 KiB
#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=1;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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...