#include <bits/stdc++.h>
using namespace std;
static const int MAXN = 300000;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
// Edge case: if n == 1, only the capital exists, so no crews needed.
if (n == 1) {
cout << 0 << "\n";
return 0;
}
vector<vector<int>> adj(n+1);
for (int i = 0; i < n-1; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
// BFS from node 1 to find distances
vector<int> dist(n+1, -1);
dist[1] = 0;
queue<int>q;
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : adj[u]) {
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
// We won't build an arch for the capital (dist=0).
// Collect frequency of distances for dist >= 1
// Note: max distance in a tree can be up to (n-1) in a worst-case chain.
// But we'll track only up to the maximum distance we actually see.
int maxD = 0;
for (int v = 2; v <= n; v++) {
maxD = max(maxD, dist[v]);
}
vector<long long> freq(maxD+1, 0LL);
for (int v = 2; v <= n; v++) {
freq[dist[v]]++;
}
// Build partial sums: S(i) = freq[1] + freq[2] + ... + freq[i]
// We only need i up to maxD
long long runningSum = 0;
long long answer = 0; // This will store the minimal K
for (int i = 1; i <= maxD; i++) {
runningSum += freq[i]; // S(i)
// We need i * K >= S(i), i.e. K >= S(i)/i
// So K >= ceil(S(i)/i) = (S(i) + i - 1) // i (integer division)
long long needed = (runningSum + i - 1) / i;
answer = max(answer, needed);
}
cout << answer << "\n";
return 0;
}
# | 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... |