제출 #1143144

#제출 시각아이디문제언어결과실행 시간메모리
1143144Gtudor새로운 문제 (POI13_luk)C++20
0 / 100
152 ms18484 KiB
#include <iostream>
#include <vector>

#define NMAX 300000

using namespace std;

int dist[NMAX + 1], f[NMAX + 1];

vector<int>edge[NMAX + 1];

void dfs(int p, int nod) {
  for(auto vecin : edge[nod]) {
    if(vecin == p)
      continue;
    dist[vecin] = dist[nod] + 1;
    f[dist[vecin]]++;
    dfs(nod, vecin);
  }
}

int main() {
  int n, a, b, mx = 0, builduri = 0, st, dr, mij;
  cin>>n;
  for(int i = 1; i < n; i++) {
    cin>>a>>b;
    edge[a].push_back(b);
    edge[b].push_back(a);
  }
  dfs(0, 1);
  st = 0;
  dr = n;
  int last = 0;
  while(st <= dr) {
    mij = (st + dr) / 2;
    bool ok = 1;
    builduri = 0;
    for(int i = 0; i <= n; i++) {
      builduri -= f[i];
      if(builduri < 0) {
        ok = 0;
        break;
      }
      builduri += mij;
    }
    if(ok) {
      last = mij;
      dr = mij - 1;
    } else {
      st = mij + 1;
    }
  }
  cout<<last;
  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...