Submission #1236825

#TimeUsernameProblemLanguageResultExecution timeMemory
1236825hamanp87Meetings 2 (JOI21_meetings2)C++17
100 / 100
313 ms24060 KiB
#include<bits/stdc++.h> using namespace std; //#pragma GCC optimize("03,unroll-loops") //#pragma GCC target("avx2") //#pragma GCC target("sse4") #define all(v) v.begin(),v.end() #define F first #define S second #define pub push_back #define pob pop_back #define puf push_front #define pof pop_front //#define randi uniform_int_distribution<long long> #define damoon(v) v.resize(unique(all(v))-v.begin()) //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //randi dist(0,10000000000000000); typedef pair<int,int> pii; typedef pair<long long,long long> pll; typedef pair<int,bool> pib; typedef pair<long long,bool> plb; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; typedef vector<int> veci; typedef vector<long long> vecl; typedef vector<bool> vecb; typedef vector<pii> vecp; typedef set<int> seti; typedef set<long long> setl; typedef set<pii> setp; typedef map<int,int> mapii; typedef map<long long,long long> mapll; typedef map<int,bool> mapib; typedef map<long long,bool> maplb; const int inf=1e9,mod=1e9+7,neginf=-1e9,N=2e5+5; const double PI=acos(-1); int n,a[N],b[N],siz[N],mark[N],ans[N]; veci adj[N]; void dfs1(int u,int p,int s,int &c) { siz[u]=1; for(int v:adj[u]) { if(v==p or mark[v]) continue; dfs1(v,u,s,c); siz[u]+=siz[v]; } if(siz[u]>=s and (c==0 or siz[u]<siz[c])) c=u; } void dfs2(int u,int p,int hg) { a[siz[u]]=max(a[siz[u]],hg); for(int v:adj[u]) { if(v==p or mark[v]) continue; dfs2(v,u,hg+1); } } void Solve(int rot,int n1) { if(n1==1) return; int c=0; dfs1(rot,rot,(n1+1)/2,c); int d=0; dfs1(c,c,0,d); mark[c]=1; for(int i=1;i<=n1;i++) b[i]=-N; for(int v:adj[c]) { if(mark[v]) continue; for(int i=1;i<=siz[v];i++) a[i]=-N; dfs2(v,c,1); for(int i=siz[v]-1;i>0;i--) a[i]=max(a[i],a[i+1]); for(int i=1;i<=siz[v];i++) { ans[i]=max(ans[i],a[i]+b[i]+1); b[i]=max(a[i],b[i]); if(i<=n1-siz[v]) ans[i]=max(ans[i],b[i]+1); } } for(int v:adj[c]) { if(mark[v]) continue; Solve(v,siz[v]); } } void solve() { cin>>n; for(int i=1;i<n;i++) { int u,v; cin>>u>>v; adj[u].pub(v); adj[v].pub(u); } Solve(1,n); for(int i=1;i<=n;i++) { if(i&1) cout<<"1\n"; else cout<<max(ans[i/2],1)<<"\n"; } } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); //ifstream fin("in.txt"); //ofstream fout("out.txt"); int t=1; //cin>>t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...