Submission #1212490

#TimeUsernameProblemLanguageResultExecution timeMemory
1212490simona1230Split the Attractions (IOI19_split)C++20
0 / 100
535 ms1114112 KiB
#include "split.h" #include <bits/stdc++.h> using namespace std; int s1,s2,s3,nn; int s[200001]; vector<int> v[200001]; vector<int> ans; int done[8]; int par[200001]; int ver=-1; void dfs(int i,int p) { for(int j=0;j<v[i].size();j++) { int nb=v[i][j]; if(nb==p)continue; dfs(nb,i); par[nb]=i; s[i]+=s[nb]; } s[i]++; if(s[i]>=s1&&nn-s[i]>=s2) ver=i; } int cnt; void dfs2(int i,int p,int c) { if(cnt==0)return; ans[i]=c; cnt--; for(int j=0;j<v[i].size();j++) { int nb=v[i][j]; if(ans[nb]==0&&nb!=par[i]) dfs2(nb,i,c); } } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { nn=n; s1=min(a,min(b,c)); s3=max(a,max(b,c)); s2=a; if(a<=b&&b<=c)s2=b; else if(a<=c&&c<=b)s2=c; for(int i=0;i<p.size();i++) v[p[i]].push_back(q[i]), v[q[i]].push_back(p[i]); dfs(0,-1); ans.resize(n); if(1)return ans; int col=1; if(c<a&&c<b)col=3; else if(b<a)col=2; done[col]=1; cnt=s1; dfs2(ver,-1,col); if(col==1&&b<c)col=2; else if(col==2&&a<c)col=1; else if(col==3&&a<=b)col=1; else if(col==1&&b>c)col=3; else if(col==2&&a>=c)col=3; else col=2; done[col]=1; cnt=s2; dfs2(0,-1,col); if(!done[1])col=1; else if(!done[2])col=2; else col=3; for(int i=0;i<n;i++) if(ans[i]==0)ans[i]=col; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...