Submission #1241452

#TimeUsernameProblemLanguageResultExecution timeMemory
1241452matsakyannnBeech Tree (IOI23_beechtree)C++20
22 / 100
146 ms107664 KiB
#include <bits/stdc++.h> using namespace std; #ifndef ONLINE_JUDGE #define dbg(x) cerr << #x << ' '; print(x); cerr << endl; #else #define dbg(x) #endif void print(int x) {cerr << x;} void print(long long x) {cerr << x;} void print(char x) {cerr << x;} void print(string x) {cerr << x;} void print(double x) {cerr << x;} template <class T> void print(vector <T> x); template <class T> void print(set <T> x); template <class T> void print(multiset <T> x); template <class T, class V> void print(pair <T, V> x); template <class T, class V> void print(map <T, V> x); template <class T> void print(vector <T> x) {cerr << "[ "; for(auto i : x) {print(i); cerr << ' ';} cerr << "]";} template <class T> void print(set <T> x) {cerr << "[ "; for(auto i : x) {print(i); cerr << ' ';} cerr << "]";} template <class T> void print(multiset <T> x) {cerr << "[ "; for(auto i : x) {print(i); cerr << ' ';} cerr << "]";} template <class T, class V> void print(pair <T, V> x) {cerr << "{"; print(x.first); cerr << ' '; print(x.second); cerr << "}";} template <class T, class V> void print(map <T, V> x) {cerr << "[ "; for(auto i : x) {print(i); cerr << ' ';} cerr << "]";} #define ll long long #define pb push_back #define ppb pop_back #define PII pair <int, int> #define PLL pair <ll, ll> #define all(v) (v).begin(), (v).end() #define OK cerr << "OK\n"; #define MP make_pair const int N0 = 2e5 + 5; int n, m; vector <int> p, c, T[N0], answ; vector <int> dfs(int node){ if(T[node].empty()){ return {}; } //build ultimate set set <int> ultimate; for(int u : T[node]){ ultimate.insert(c[u]); } if(ultimate.size() != T[node].size()) answ[node] = 0; //build sub vector <pair <int, set <int>>> sub; for(int u : T[node]){ vector <int> k = dfs(u); answ[node] &= answ[u]; set <int> colors; for(int i : k){ colors.insert(c[i]); } sub.pb({colors.size(), colors}); } //check sort(all(sub)); reverse(all(sub)); set <int> tmp = ultimate; for(auto x : sub){ int sz = tmp.size(); set <int> ntmp; for(int i : x.second){ tmp.insert(i); ntmp.insert(i); } if(tmp.size() != sz){ answ[node] = 0; } tmp = ntmp; } vector <int> res; return T[node]; } vector <int> beechtree(int N, int M, vector <int> P, vector <int> C){ n = N, m = M, p = P, c = C; for(int i = 1; i < n; i++){ T[p[i]].pb(i); } answ.assign(n, 1); dfs(0); return answ; }
#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...