Submission #821420

#TimeUsernameProblemLanguageResultExecution timeMemory
821420BaytoroSplit the Attractions (IOI19_split)C++17
18 / 100
57 ms13172 KiB
#include "split.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; const int maxN=1e5+5; vector<int> ans,g[maxN]; int used[maxN]; void dfs(int x, int &d, int c){ if(d<=0) return; ans[x]=c; used[x]=1; for(auto it: g[x]){ if(used[it]) continue; dfs(it,--d,c); } } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { int m=p.size(); ans.resize(n); int A=a,B=b,C=c; if(A>B) swap(A,B); if(B>C) swap(B,C); if(A>B) swap(A,B); bool ok=1,sb1=1; for(int i=0;i<m;i++){ g[p[i]].push_back(q[i]); g[q[i]].push_back(p[i]); if(g[p[i]].size()>2) sb1=0; if(g[q[i]].size()>2) sb1=0; } if(sb1){ for(int i=0;i<n;i++){ if(g[i].size()==1 && ok){ dfs(i,b,2); ok=0; } else if(g[i].size()==1 && !ok){ dfs(i,a,1); break; } } if(ok){ dfs(0,b,2); for(int i=0;i<n;i++){ if(!used[i]){ dfs(i,a,1); break; } } } for(int i=0;i<n;i++){ if(!ans[i]) ans[i]=3; } return ans; } else{ dfs(0,b,2); bool ok=0; for(int i=0;i<n;i++){ if(ans[i]) continue; ans[i]=3; if(!ok) ans[i]=1; ok=1; } return ans; } }
#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...