Submission #956791

#TimeUsernameProblemLanguageResultExecution timeMemory
956791LCJLYMeetings 2 (JOI21_meetings2)C++14
0 / 100
2 ms10332 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl; typedef pair<long long,int>pii; typedef pair<pii,pii>pi2; mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); vector<int>adj[200005]; int pp[200005]; int d[200005]; void dfs(int index, int par){ for(auto it:adj[index]){ if(it==par) continue; d[it]=d[index]+1; pp[it]=index; dfs(it,index); } } bool visited[200005]; int cnt[200005]; int cnt2[200005]; void dfs2(int index, int take, int type){ visited[index]=true; if(type==1)cnt[take]++; else cnt2[take]++; for(auto it:adj[index]){ if(visited[it]) continue; dfs2(it,take,type); } } void solve(){ int n; cin >> n; int temp,temp2; for(int x=0;x<n-1;x++){ cin >> temp >> temp2; adj[temp].push_back(temp2); adj[temp2].push_back(temp); } //show(check,1); dfs(1,-1); pii best={-1,-1}; for(int x=1;x<=n;x++){ best=max(best,{d[x],x}); } memset(d,0,sizeof(d)); dfs(best.second,-1); pii best2={-1,-1}; for(int x=1;x<=n;x++){ best2=max(best2,{d[x],x}); } //show(check,1); int cur=best2.second; vector<int>path; while(1){ path.push_back(cur); visited[cur]=true; if(cur==best.second) break; cur=pp[cur]; } int half=(int)path.size()/2; for(int x=0;x<half;x++){ dfs2(path[x],x,1); } //show(check,1); for(int x=(int)path.size()-1;x>=(int)path.size()-half;x--){ dfs2(path[x],(int)path.size()-1-x,2); } //for(int x=0;x<half;x++){ //show2(cnt[x],cnt[x],cnt2[x],cnt2[x]); //} int ptr=0; int ptr2=0; int add=path.size()%2; //show(add,add); for(int x=1;x<=n;x++){ if(x%2==1){ cout << 1 << "\n"; } else{ while(ptr<half&&cnt[ptr]==0){ ptr++; //show(loop,1); } while(ptr2<half&&cnt2[ptr2]==0) ptr2++; cnt[ptr]--; cnt2[ptr2]--; if(cnt[ptr]<0&&add){ cnt[ptr]++; add=0; } if(cnt2[ptr2]<0&&add){ cnt2[ptr2]++; add=0; } //show(add,add); //show2(cnt[ptr],cnt[ptr],cnt2[ptr2],cnt2[ptr2]); if(cnt[ptr]<0||cnt2[ptr2]<0){ //show(trigger,1); cout << 1 << "\n"; } else cout << max(1LL,(int)path.size()-ptr-ptr2) << "\n"; } } } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); int t=1; //freopen("in.txt","w",stdout); //cin >> t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...