#include<bits/stdc++.h>
#define taskname "C"
using namespace std;
const int lim = 2e5 + 5;
const int INF = 1e9;
template<class T>bool minimize(T& a, T b){
if(a > b){
a = b;
return true;
}
return false;
}
template<class T>void maximize(T& a, T b){
if(a < b){
a = b;
}
}
int n;
namespace sub1{
void solve(){
vector<vector<int>>g(n);
for(int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
g[--u].emplace_back(--v);
g[v].emplace_back(u);
}
vector<vector<int>>d(n, vector<int>(n, -1));
for(int i = 0; i < n; i++){
queue<int>q;
q.push(i);
d[i][i] = 0;
while(!q.empty()){
int u = q.front();
q.pop();
for(int& v : g[u]){
if(d[i][v] == -1){
d[i][v] = d[i][u] + 1;
q.push(v);
}
}
}
}
vector<int>ans(n + 1, 0);
for(int mask = (1 << n) - 1; mask > 0; mask--){
vector<int>p;
for(int i = 0; i < n; i++){
if(1 << i & mask){
p.emplace_back(i);
}
}
int cnt = 0, opt = INF;
for(int i = 0; i < n; i++){
int distance = 0;
for(int& j : p){
distance += d[i][j];
}
if(minimize(opt, distance)){
cnt = 0;
}
if(opt == distance){
cnt++;
}
}
maximize(ans[p.size()], cnt);
}
for(int i = 1; i <= n; i++){
cout << ans[i] << "\n";
}
}
}
namespace sub2{
void solve(){
vector<vector<int>>g(n + 1);
for(int i = 1; i < n; i++){
int u, v;
cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
vector<int>ans(n + 1, 1), cnt_child(n + 1, 1), parent(n + 1), h(n + 1);
function<void(int)>dfs;
dfs = [&] (int s){
for(int& d : g[s]){
if(d != parent[s]){
h[d] = h[parent[d] = s] + 1;
dfs(d);
cnt_child[s] += cnt_child[d];
}
}
};
parent[1] = h[1] = 0;
dfs(1);
for(int i = 1; i <= n; i++){
int j = i, k = i;
while(j != 0){
maximize(ans[min(cnt_child[i], n - cnt_child[k]) << 1], h[i] - h[j] + 1);
j = parent[k = j];
}
}
for(int i = n - (n & 1) - 2; i > 0; i--){
maximize(ans[i], ans[i + 2]);
}
for(int i = 1; i <= n; i++){
cout << ans[i] << "\n";
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
cin >> n;
if(n <= 16){
sub1::solve();
}
else if(n <= 4000){
sub2::solve();
}
}
Compilation message (stderr)
meetings2.cpp: In function 'int main()':
meetings2.cpp:112:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
112 | freopen(taskname".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |