Submission #1242500

#TimeUsernameProblemLanguageResultExecution timeMemory
1242500bangan참나무 (IOI23_beechtree)C++20
9 / 100
49 ms16708 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define ALL(a) a.begin(), a.end() const int MXN = 200200; int n; int m; vector<int> p; vector<int> c; vector<int> adj[MXN]; bool is_subset(vector<int> a, vector<int> b) { set<int> all; for (int x : b) all.insert(c[x]); for (int x : a) if (!all.contains(c[x])) return false; return true; } 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++) adj[p[i]].pb(i); vector<int> ans(n); vector<vector<int>> vec; for (int v : adj[0]) { vec.pb({}); for (int u : adj[v]) vec.back().pb(u), ans[u] = 1; sort(ALL(vec.back()), [&](int x, int y) { return c[x]<c[y]; }); ans[v] = 1; for (int i=0; i+1 < vec.back().size(); i++) if (c[vec.back()[i]] == c[vec.back()[i+1]]) ans[v] = 0; } sort(ALL(vec), [&](auto x, auto y) { return x.size() < y.size(); }); vec.pb({}); for (int v : adj[0]) vec.back().pb(v); sort(ALL(vec.back()), [&](int x, int y) { return c[x]<c[y]; }); ans[0] = 1; for (int i=0; i+1 < vec.back().size(); i++) if (c[vec.back()[i]] == c[vec.back()[i+1]]) ans[0] = 0; for (int v : adj[0]) if (ans[v]==0) ans[0] = 0; for (int i=1; i<vec.size(); i++) if (!is_subset(vec[i-1], vec[i])) ans[0] = 0; 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...