Submission #1286203

#TimeUsernameProblemLanguageResultExecution timeMemory
1286203denislavMeetings 2 (JOI21_meetings2)C++20
20 / 100
4091 ms14252 KiB
# include <iostream>
# include <vector>
using namespace std;
template<class T> void chmax(T& x, const T& y) {x=max(x,y);}

const int MAX=2e5+11;

int n;
vector<int> adj[MAX];
int out[MAX];

int sz[MAX];
int from[MAX];
int h[MAX];

void dfs(int curr, int par)
{
    sz[curr]=1;
    for(int nxt: adj[curr])
    {
        if(nxt==par) continue;

        if(from[curr]==0) from[nxt]=nxt;
        else from[nxt]=from[curr];
        h[nxt]=h[curr]+1;

        dfs(nxt,curr);
        sz[curr]+=sz[nxt];
    }
}

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

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

    for(int i=1;i<=n;i++) out[i]=1;
    for(int i=1;i<=n;i++)
    {
        h[i]=1;
        from[i]=0;
        dfs(i,0);
        for(int u=1;u<=n;u++)
        {
            if(u==i) continue;
            chmax(out[2*min(sz[u],n-sz[from[u]])],h[u]);
            //cout<<i<<"->"<<u<<":"<<min(sz[u],n-sz[from[u]])<<" "<<h[u]<<"\n";
            //if(i==5 and u==2) cout<<sz[u]<<" "<<from[u]<<"\n";
        }
    }

    int start=n;
    if(start%2==1) start--;
    for(int i=start-2;i>=2;i--) out[i]=max(out[i],out[i+2]);
    for(int i=1;i<=n;i++) cout<<out[i]<<"\n";

    return 0;
}



#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...