Submission #1145288

#TimeUsernameProblemLanguageResultExecution timeMemory
1145288calisovraduTriumphal arch (POI13_luk)C++20
100 / 100
517 ms27448 KiB
#include <bits/stdc++.h>
using namespace std;
    vector<vector<int>> v;
    vector<long long> dp;
    vector<int> checked;

int n;
void ref(){
    for(int i=1;i<=n;i++)
    checked[i]=dp[i]=0;
}

void dfs(int node,long long crews){

    for(int i=0;i<v[node].size();i++){
        int newnode = v[node][i];

        if(checked[newnode]==0){
            checked[newnode]=1;

            dfs(newnode,crews);
            dp[node]+=dp[newnode];
            dp[node]++;
        }
    }
    if(dp[node]-crews>0)
    dp[node] = dp[node]-crews;
    else
    dp[node] = 0;

}

int main() {
    cin>>n;
    v.resize(n+1);
    dp.resize(n+1);
    checked.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);
    }
    
    long long l=0,r=n,mij,corect=n;
    while(l<=r){

        mij=(l+r)/2;
        ref();
        checked[1]=1;
        dfs(1,mij);
        
        if(dp[1]==0){
            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...