Submission #285983

#TimeUsernameProblemLanguageResultExecution timeMemory
285983DanerZeinSplit the Attractions (IOI19_split)C++14
18 / 100
138 ms15224 KiB
#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);
  /*for(int i=0;i<n;i++){
    if(G[i].size()==1){
      dfs(i,i);
      break;
    }
  }*/
  dfs(0,0);

  bool sw=0;
  /* for(int i=0;i<n;i++){
    cout<<sb[i]<<" ";
  }
  cout<<endl;*/
  vector<int> res;
  res.resize(n);
  for(int i=0;i<n;i++){
    int au=sb[i];
    if(au>=aux[0].first){
      if(n-au>=aux[1].first){
	memset(vis,0,sizeof vis);
	ca=aux[0].first;
	dfs_path(i,pa[i]);
	for(int j=0;j<path.size();j++){
	  res[path[j]]=aux[0].second;
	}
	path.clear();
	ca=aux[1].first;
	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:69:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |  for(int j=0;j<path.size();j++){
      |              ~^~~~~~~~~~~~
split.cpp:75:15: 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 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...