Submission #1143518

#TimeUsernameProblemLanguageResultExecution timeMemory
1143518hhvbTriumphal arch (POI13_luk)C++20
0 / 100
137 ms17336 KiB
#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 ) {
            used[v1] = true;
            adancime[adj[nod][i]] = 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;
        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 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...