제출 #1143802

#제출 시각아이디문제언어결과실행 시간메모리
1143802adimiclaus15새로운 문제 (POI13_luk)C++17
90 / 100
513 ms25100 KiB
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 3e5;
int dp[NMAX + 1];
vector<int> G[NMAX + 1];

void dfs(int node, int p, int val) {
    dp[node] = 0;
    for(auto next : G[node]) {
        if(next != p) {
            dfs(next, node, val);
            dp[node] += dp[next] + 1;
        }
    }
    dp[node] = max(dp[node] - val, 0);
}

int main() {
    int n;
    cin >> n;
    for(int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    int st = 1;
    int dr = n;
    int sol = n;
    while(st <= dr) {
        int mid = (st + dr) / 2;
        dfs(1, 0, mid);
        if(dp[1] == 0) {
            sol = mid;
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }
    cout << sol;
    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...