This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "split.h"
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef pair<int,int> ii;
vector<vi> G;
int pa[100010];
int vis[100010];
int sb[100010];
int dfs(int u,int p){
pa[u]=p;
int ans=1;
for(auto &v:G[u]){
if(pa[v]==-1){
ans+=dfs(v,u);
}
}
sb[u]=ans;
return ans;
}
vi path;
int ca;
void dfs_path(int u,int npr){
path.push_back(u);
vis[u]=1;
ca--;
if(ca==0) return;
for(auto &v:G[u]){
if(!vis[v] and v!=npr){
dfs_path(v,npr);
if(ca==0) return;
}
}
}
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
G.resize(n+1);
for(int i=0;i<p.size();i++){
G[p[i]].push_back(q[i]);
G[q[i]].push_back(p[i]);
}
vector<ii> aux;
aux.push_back(ii(a,1));
aux.push_back(ii(b,2));
aux.push_back(ii(c,3));
sort(aux.begin(),aux.end());
memset(pa,-1,sizeof pa);
dfs(0,-2);
/*for(int i=0;i<n;i++){
cout<<sb[i]<<" ";
}
cout<<endl;*/
vector<int> res;
res.resize(n);
bool sw=0;
for(int i=0;i<n;i++){
int at=sb[i];
int bt=n-sb[i];
sw=0;
if(at>bt) {sw=1;swap(at,bt);}
if(at>=aux[0].first and bt>=aux[1].first){
memset(vis,0,sizeof vis);
ca=aux[0].first;
if(sw==1) dfs_path(pa[i],i);
else
dfs_path(i,pa[i]);
for(int j=0;j<path.size();j++){
res[path[j]]=aux[0].second;
}
ca=aux[1].first;
path.clear();
if(sw==1) dfs_path(i,pa[i]);
else
dfs_path(pa[i],i);
for(int j=0;j<path.size();j++){
res[path[j]]=aux[1].second;
}
sw=1;
break;
}
}
//cout<<"process"<<endl;
if(sw==0){
for(int i=0;i<n;i++){
res[i]=0;
}
}
else{
for(int i=0;i<n;i++){
if(res[i]==0) res[i]=aux[2].second;
}
}
return res;
}
Compilation message (stderr)
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:37:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | for(int i=0;i<p.size();i++){
| ~^~~~~~~~~
split.cpp:67:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
67 | for(int j=0;j<path.size();j++){
| ~^~~~~~~~~~~~
split.cpp:75:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
75 | for(int j=0;j<path.size();j++){
| ~^~~~~~~~~~~~
# | 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... |