#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |