Submission #1257976

#TimeUsernameProblemLanguageResultExecution timeMemory
1257976LucaLucaMMeetings 2 (JOI21_meetings2)C++20
4 / 100
4094 ms580 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

using ll = long long;
#define debug(x) #x << " = " << x << '\n'

int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(0);

  int n;
  std::cin >> n;

  std::vector<std::vector<int>> g(n);

  for (int i = 1; i < n; i++) {
    int u, v;
    std::cin >> u >> v;
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }

  std::vector<int> answer(n + 1, 0);
  std::vector<int> score(n, 0);

  auto dfs = [&](auto &&self, int u, int p, int d) -> void {
    score[u] += d;
    for (int v : g[u]) {
      if (v != p) {
        self(self, v, u, d + 1);
      }
    }
  };

  for (int mask = 1; mask < (1 << n); mask++) { 
    for (int i = 0; i < n; i++) {
      if (mask >> i & 1) {
        dfs(dfs, i, -1, 0);
      }
    }
    int best = n * n, cnt = 0;
    for (int i = 0; i < n; i++) {
      if (score[i] < best) {
        best = score[i];
        cnt = 1;
      } else if (score[i] == best) {
        cnt++;
      }
      score[i] = 0;
    }
    answer[__builtin_popcount(mask) - 1] = std::max(answer[__builtin_popcount(mask) - 1], cnt);
  }

  for (int i = 0; i < n; i++) {
    std::cout << answer[i] << ' ';
  }

  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...