Submission #1143371

#TimeUsernameProblemLanguageResultExecution timeMemory
1143371SonicMLTriumphal arch (POI13_luk)C++20
30 / 100
172 ms21476 KiB
#include <iostream>
#include <vector>

using namespace std;

typedef unsigned long long ll;

int n;

int const NMAX = 3e5;
vector <ll> g[1 + NMAX];
ll depth[1 + NMAX];

ll ans = 0;

ll cautbin(ll from, ll to, ll target, ll mult) {
  if(from >= to) {
    return from;
  }else {
    ll mid = (from + to) / 2;
    if(1LL * mid * mult >= target) {
      return cautbin(from, mid, target, mult);
    }else {
      return cautbin(mid+1, to, target, mult);
    }
  }
}

void DFS(ll node, ll parent, ll arc, ll builder) {
  for(ll i = 0;i < g[node].size();i++) {
    ll to = g[node][i];
    if(to != parent) {
      arc++;
    }
  }
  ll adder = cautbin(builder, n, arc, depth[node]);
  builder = max(builder, adder);
  ans = max(ans, builder);
  for(ll i = 0;i < g[node].size();i++) {
    ll to = g[node][i];
    if(to != parent) {
      depth[to] = depth[node] + 1;
      DFS(to, node, arc, builder);
    }
  }
}

int main() {

  cin >> n;
  for(ll i = 1;i < n;i++) {
    ll a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  depth[1] = 1;
  DFS(1, 1, 0, 0);
  cout << ans;
  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...