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...