Submission #1205009

#TimeUsernameProblemLanguageResultExecution timeMemory
1205009PagodePaivaBeech Tree (IOI23_beechtree)C++20
9 / 100
2095 ms12220 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; const int N = 100010; vector <int> g[N]; vector <int> componentes[N]; int cor[N]; int cnt[N]; int perm[N]; int pai[N]; vector <int> cores; int res[N]; void dfs(int v, int p){ pai[v] = p; res[v] = 0; componentes[v].push_back(v); for(auto x : g[v]){ if(x == p) continue; dfs(x, v); for(auto val : componentes[x]) componentes[v].push_back(val); } sort(componentes[v].begin(), componentes[v].end()); do{ if(v != componentes[v][0]) continue; for(int i = 0;i < componentes[v].size();i++){ perm[componentes[v][i]] = i; } bool aux = true; for(int i = 1;i < componentes[v].size();i++){ if(perm[pai[componentes[v][i]]] != cnt[cor[componentes[v][i]]]){ aux = false; } cnt[cor[componentes[v][i]]]++; } if(aux) res[v] = true; for(auto x : cores) cnt[x] = 0; } while(next_permutation(componentes[v].begin(), componentes[v].end())); return; } vector<int> beechtree(int n, int m, std::vector<int> p, std::vector<int> c){ for(int i = 1;i < n;i++){ g[i].push_back(p[i]); g[p[i]].push_back(i); cor[i] = c[i]; cores.push_back(c[i]); } dfs(0, 0); vector <int> ans; for(int i = 0;i < n;i++) ans.push_back(res[i]); 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...
#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...