제출 #1286203

#제출 시각아이디문제언어결과실행 시간메모리
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...