Submission #406156

#TimeUsernameProblemLanguageResultExecution timeMemory
406156ngraceSplit the Attractions (IOI19_split)C++14
22 / 100
146 ms12216 KiB
#include "split.h" #include <bits/stdc++.h> using namespace std; vector<vector<pair<int,int>>> adj; vector<bool> vis; int dfs(int cur){//on tree if(vis[cur]){ return 0; } vis[cur]=true; int ret=0; for(pair<int,int>& it:adj[cur]){ int sub=dfs(it.first); ret+=sub; it.second=sub; } return ret+1; } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { adj=vector<vector<pair<int,int>>>(n); for(int i=0;i<p.size();i++){ adj[p[i]].push_back({q[i],-1}); adj[q[i]].push_back({p[i],-1}); } vis=vector<bool>(n); dfs(0); vector<int> answer(n,0); bool done=false; for(int i=0;i<p.size();i++){ for(pair<int,int> it:adj[i]){ int prim=-1,sec=-1,spare=-1; if(it.second>=a){ if(n-it.second>=b){ prim=1; sec=2; spare=3; done=true; } else if(n-it.second>=c){ prim=1; sec=3; spare=2; done=true; } } if(it.second>=b && !done){ if(n-it.second>=a){ prim=2; sec=1; spare=3; done=true; } else if(n-it.second>=c){ prim=2; sec=3; spare=1; done=true; } } if(it.second>=c && !done){ if(n-it.second>=a){ prim=3; sec=1; spare=2; done=true; } else if(n-it.second>=b){ prim=3; sec=2; spare=1; done=true; } } if(prim!=-1){ done=true; int primC=(prim==1)?a:((prim==2)?b:c); int secC=(sec==1)?a:((sec==2)?b:c); vis=vector<bool>(n,false); stack<int> s; vis[i]=true; s.push(it.first); while(s.size()>0){ int cur=s.top(); s.pop(); if(!vis[cur]){ vis[cur]=true; if(primC>0){ primC--; answer[cur]=prim; } else{ answer[cur]=spare; } for(pair<int,int> pt:adj[cur]){ s.push(pt.first); } } } vis=vector<bool>(n,false); vis[it.first]=true; s.push(i); while(s.size()>0){ int cur=s.top(); s.pop(); if(!vis[cur]){ vis[cur]=true; if(secC>0){ secC--; answer[cur]=sec; } else{ answer[cur]=spare; } for(pair<int,int> pt:adj[cur]){ s.push(pt.first); } } } } if(done){ break; } } if(done){ break; } } return answer; }

Compilation message (stderr)

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:25:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |  for(int i=0;i<p.size();i++){
      |              ~^~~~~~~~~
split.cpp:34:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |  for(int i=0;i<p.size();i++){
      |              ~^~~~~~~~~
#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...