Submission #286002

#TimeUsernameProblemLanguageResultExecution timeMemory
286002DanerZeinSplit the Attractions (IOI19_split)C++14
40 / 100
132 ms13944 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);
   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 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...