Submission #288779

#TimeUsernameProblemLanguageResultExecution timeMemory
288779DanerZeinSplit the Attractions (IOI19_split)C++14
18 / 100
227 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]; vector<ii> aux; 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; } } } int t; bool sep=0; vector<int> pa1,pa2; void dfs1(int u,int sw){ if(ca<=0){ sep=1; return; } if(sw==0) pa1.push_back(u); if(sw==1) pa2.push_back(u); ca--; vis[u]=1; //cout<<u<<" "<<vis[u]<<endl; if(ca==0){ sep=1; return;} for(auto &v:G[u]){ if(vis[v]==0){ dfs1(v,sw); if(ca==0) return; } } } vector<int> points24(){ vector<int> r1; r1.resize(t); for(int i=0;i<t;i++){ memset(vis,0,sizeof vis); ca=aux[0].first; pa1.clear(); dfs1(i,0); for(int j=0;j<t;j++){ //cout<<vis[j]<<endl; sep=0; if(vis[j]==0){ ca=aux[1].first; pa2.clear(); dfs1(j,1); if(sep==1){ break; } } } if(sep==1) break; //cout<<endl; } if(sep==1){ for(int i=0;i<pa1.size();i++){ //cout<<pa1[i]<<" "; r1[pa1[i]]=aux[0].second; } // cout<<endl; for(int i=0;i<pa2.size();i++){ //cout<<pa2[i]<<" "; r1[pa2[i]]=aux[1].second; } //cout<<endl; for(int i=0;i<r1.size();i++){ if(r1[i]==0){ r1[i]=aux[2].second; } } } return r1; } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { G.resize(n+1); t=n; for(int i=0;i<p.size();i++){ G[p[i]].push_back(q[i]); G[q[i]].push_back(p[i]); } aux.push_back(ii(a,1)); aux.push_back(ii(b,2)); aux.push_back(ii(c,3)); sort(aux.begin(),aux.end()); if(n<=2500 and p.size()<=5000){ vector<int> r2=points24(); return r2; } memset(pa,-1,sizeof pa); dfs(0,-2); 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; } } 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> points24()':
split.cpp:81:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for(int i=0;i<pa1.size();i++){
      |                 ~^~~~~~~~~~~
split.cpp:86:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(int i=0;i<pa2.size();i++){
      |                 ~^~~~~~~~~~~
split.cpp:91:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |     for(int i=0;i<r1.size();i++){
      |                 ~^~~~~~~~~~
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:102:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |   for(int i=0;i<p.size();i++){
      |               ~^~~~~~~~~
split.cpp:130:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  130 |       for(int j=0;j<path.size();j++){
      |                   ~^~~~~~~~~~~~
split.cpp:138:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |       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...