#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |