Submission #1143282

#TimeUsernameProblemLanguageResultExecution timeMemory
1143282SonicMLTriumphal arch (POI13_luk)C++20
30 / 100
187 ms18388 KiB
#include <iostream>
#include <vector>

using namespace std;

int n;

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

int ans = 0;

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

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

int main() {

  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);
  }
  DFS(1, 1, 0, 0);
  cout << ans << '\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...