Submission #1211310

#TimeUsernameProblemLanguageResultExecution timeMemory
1211310guagua0407Meetings 2 (JOI21_meetings2)C++20
0 / 100
3 ms5136 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } const int mxn=2e5+5; vector<int> adj[mxn]; int up[mxn][20]; int depth[mxn]; int sz[mxn]; int dfs(int v,int p=0){ sz[v]=1; up[v][0]=p; depth[v]=depth[p]+1; for(auto u:adj[v]){ if(u==p) continue; sz[v]+=dfs(u,v); } return sz[v]; } int find(int v,int p,int tot){ for(auto u:adj[v]){ if(u==p) continue; if(sz[u]*2>=tot) return find(u,v,tot); } return v; } int dis(int a,int b){ if(depth[a]<depth[b]) swap(a,b); int len=depth[a]-depth[b]; int ans=0; for(int i=0;i<20;i++){ if(len&(1<<i)){ ans+=(1<<i); a=up[a][i]; } } if(a==b) return ans; for(int i=19;i>=0;i--){ int ta=up[a][i]; int tb=up[b][i]; if(ta!=tb){ ans+=(1<<i)*2; a=ta; b=tb; } } return ans+2; } int main(){_ int n; cin>>n; for(int i=0;i<n-1;i++){ int a,b; cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } dfs(1); int root=find(1,0,n); dfs(root); for(int j=1;j<20;j++){ for(int i=1;i<=n;i++){ up[i][j]=up[up[i][j-1]][j-1]; } } int A=root; int B=root; int cur=0; vector<int> ord; for(int i=1;i<=n;i++){ if(i==root) continue; ord.push_back(i); } auto comp=[&](int a,int b){ return sz[a]>sz[b]; }; sort(all(ord),comp); vector<int> ans(n+1); //cout<<root<<'\n'; for(auto v:ord){ int aa=dis(v,A); int bb=dis(v,B); //cout<<v<<' '<<A<<' '<<B<<' '<<aa<<' '<<bb<<'\n'; ans[sz[v]]=max(ans[sz[v]],max(aa,bb)+1); if(aa<bb){ swap(aa,bb); swap(A,B); } if(aa>cur){ B=v; cur=aa; } } for(int i=n-1;i>=1;i--){ ans[i]=max(ans[i],ans[i+1]); } for(int i=1;i<=n;i++){ if(i%2==1) cout<<1<<'\n'; else cout<<ans[i/2]<<'\n'; } return 0; } //maybe its multiset not set //yeeorz //diaoborz

Compilation message (stderr)

meetings2.cpp: In function 'void setIO(std::string)':
meetings2.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
meetings2.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...