제출 #1143252

#제출 시각아이디문제언어결과실행 시간메모리
1143252snpmrnhlol새로운 문제 (POI13_luk)C++20
100 / 100
456 ms27676 KiB
#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 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...