Submission #1215400

#TimeUsernameProblemLanguageResultExecution timeMemory
1215400brintonSplit the Attractions (IOI19_split)C++20
0 / 100
603 ms1114112 KiB
#include <bits/stdc++.h> #include "split.h" using namespace std; vector<int> find_split(int N, int a, int b, int c, vector<int> p, vector<int> q) { vector<int> draw; {// a < b < c vector<pair<int,int>> need{{a,1},{b,2},{c,3}}; sort(need.begin(),need.end()); a = need[0].first,b = need[1].first,c = need[2].first; draw = {need[0].second,need[1].second,need[2].second}; } vector<vector<int>> edges(N); vector<int> color(N,draw[2]); for(int i = 0;i < p.size();i++){ edges[p[i]].push_back(q[i]); edges[q[i]].push_back(p[i]); } vector<vector<int>> child(N); vector<int> sz(N,1); function<void(int,int)> dfs = [&](int cur,int par){ for(auto nxt:edges[cur]){ if(nxt == par) continue; child[cur].push_back(nxt); dfs(nxt,cur); } }; function<int(int)> set_sz = [&](int cur){ for(auto nxt:child[cur]){ sz[cur] += set_sz(nxt); } return sz[cur]; }; dfs(0,-1); set_sz(0); int root = -1; int s1,s2; function<void(int,int)> set_color1 = [&](int cur,int changeto){ if(s1 > 0){ color[cur] = changeto; s1--; } for(auto nxt:child[cur]){ set_color1(nxt,changeto); } }; function<void(int,int)> set_color2 = [&](int cur,int changeto){ if(s2 > 0){ color[cur] = changeto; s2--; } for(auto nxt:child[cur]){ if(nxt == root) continue; set_color2(nxt,changeto); } }; for(int i = 0;i < N;i++){ if(sz[i] >= a && N-sz[i] >= b) { root = i; s1 = a,s2 = b; set_color1(i,draw[0]); set_color2(0,draw[1]); return color; } if(sz[i] >= b && N-sz[i] >= a) { s1 = b,s2 = a; set_color1(i,draw[1]); set_color2(0,draw[0]); root = i; return color; } } return vector<int>(N,0); }
#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...