Submission #1143580

#TimeUsernameProblemLanguageResultExecution timeMemory
1143580SonicMLTriumphal arch (POI13_luk)C++20
100 / 100
637 ms23928 KiB
#include <iostream>
#include <vector>

using namespace std;

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

int DFS(int node, int parent, int crews) {
  int extraCrew = 0;
  for(int i = 0;i < g[node].size();i++) {
    int to = g[node][i]; 
    if(to != parent) {
      extraCrew += DFS(to, node, crews) + 1;
    }
  }
  return max(extraCrew - crews, 0);
}

int cautbin(int from, int to) {
  if(from >= to) {
    return from;
  }else {
    int mid = (from + to) / 2;
    if(DFS(1, 1, mid) == 0) { 
      return cautbin(from, mid);
    }else {
      return cautbin(mid+1, to);
    }
  }
}
int main() {

  int n;
  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);
  }
  cout << cautbin(0, n) << '\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...