Submission #1216701

#TimeUsernameProblemLanguageResultExecution timeMemory
1216701salmonMeetings 2 (JOI21_meetings2)C++20
0 / 100
3 ms4932 KiB
#include <bits/stdc++.h> using namespace std; int N; vector<int> adjlst[200100]; int u,v; int suff[200100]; bool used[200100]; int sise[200100]; int parent[200100]; int d[200100]; void dfs(int i, int p){ sise[i] = 1; parent[i] = p; for(int j : adjlst[i]){ if(j == p || used[j]) continue; dfs(j,i); sise[i] += sise[j]; } } void loadfs(int i, int p, int de, vector<int> &a){ if(de == a.size()){ a.push_back(0); } sise[i] = 1; for(int j : adjlst[i]){ if(j == p || used[j]) continue; loadfs(j,i, de + 1, a); sise[i] += sise[j]; } a[de] = max(a[de], sise[i]); } void solve(int i){ int c = i; dfs(i,-1); if(sise[i] <= 2) return; while(true){ bool die = true; for(int j : adjlst[c]){ if(j == parent[c] || used[j]) continue; if(sise[j] * 2 >= sise[i]){ c = j; die = false; break; } } if(die) break; } used[c] = true; vector<int> v = {N}; for(int j : adjlst[c]){ if(used[j]) continue; vector<int> temp = {N}; loadfs(j,-1,1,temp); for(int i = 0; i < temp.size(); i++){ int it = upper_bound(v.begin(),v.end(),temp[i],greater<int>()) - v.begin() - 1; suff[it + i] = max(suff[it + i],temp[i]); if(temp[i] >= v.back()){ auto it = lower_bound(v.begin(), v.end(), temp[i], greater<int>()); suff[(it - v.begin()) + i] = max(suff[(it - v.begin()) + 1],*it); } } if(temp.size() > v.size()) swap(temp,v); for(int i = 0; i < temp.size(); i++){ v[i] = max(v[i],temp[i]); } } /*printf("%d\n",c); for(int i = 0; i <= N; i++){ printf("%d ",suff[i]); } printf("\n");*/ for(int j : adjlst[c]){ if(!used[j]) solve(j); } } int main(){ scanf(" %d",&N); for(int i = 0; i < N - 1; i++){ scanf(" %d",&u); scanf(" %d",&v); adjlst[u].push_back(v); adjlst[v].push_back(u); } for(int i = 0; i <= N; i++){ suff[i] = 0; used[i] = false; } solve(1); for(int i = N - 1; i >= 0; i--){ suff[i] = max(suff[i + 1],suff[i]); } int it = N; for(int i = 1; i <= N; i++){ if(i % 2 == 1){ printf("1\n"); } else{ while(suff[it] < i/2) it--; printf("%d\n",it + 1); } } }

Compilation message (stderr)

meetings2.cpp: In function 'int main()':
meetings2.cpp:107:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  107 |         scanf(" %d",&N);
      |         ~~~~~^~~~~~~~~~
meetings2.cpp:110:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |                 scanf(" %d",&u);
      |                 ~~~~~^~~~~~~~~~
meetings2.cpp:111:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  111 |                 scanf(" %d",&v);
      |                 ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...