#include <bits/stdc++.h>
using namespace std;
const int Nmax = 300001;
queue<int> q;
vector<int> adj[Nmax];
vector< pair<int, int> > v;
int adancime[Nmax];
long long dp[Nmax];
bool used[Nmax];
int main()
{
int n, son, nod, v1, u, i, j, adancim;
int l, r, k;
cin >> n;
for ( i = 0; i < n - 1; i ++ ) {
cin >> u >> v1;
adj[u].push_back( v1 );
adj[v1].push_back( u );
}
q.push( 1 );
used[1] = true;
v.push_back( make_pair (0, 1) );
while ( !q.empty() ) {
nod = q.front();
for ( i = 0; i < adj[nod].size(); i ++ ) {
v1 = adj[nod][i];
if ( used[v1] == false ) {
q.push( v1 );
used[v1] = true;
adancime[v1] = adancime[nod] + 1;
v.push_back( {adancime[v1], v1 } );
}
}
q.pop();
}
sort ( v.begin(), v.end() );
l = -1;
r = Nmax - 1;
while ( l < r - 1 ) {
k = ( l + r ) / 2;
for ( i = v.size() - 1; i >= 0; i -- ) {
nod = v[i].second;
adancim = v[i].first;
dp[nod] = 0;
for ( j = 0; j < adj[nod].size(); j ++ )
if ( adancime[ adj[nod][j] ] > adancim )
dp[nod] = dp[nod] + dp[ adj[nod][j] ] + 1;
dp[nod] -= k;
if ( dp[nod] < 0 ) {
dp[nod] = 0;
}
}
if ( dp[1] > 0 )
l = k;
else
r = k;
}
cout << r << "\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... |