Submission #1210714

#TimeUsernameProblemLanguageResultExecution timeMemory
1210714Nelt참나무 (IOI23_beechtree)C++20
0 / 100
4 ms5008 KiB
#include "beechtree.h" #include <bits/stdc++.h> #define endl "\n" #define ll long long using namespace std; const ll N = 2e5 + 5; vector<ll> g[N]; vector<int> ans; ll c[N], p[N]; ll last[N], ptr[N], sub[N]; bool ok[N]; void dfs(ll v) { sub[v] = 1; ok[v] = 1; for (ll to : g[v]) dfs(to), sub[v] += sub[to], ok[v] &= ok[to]; set<ll> s; for (ll to : g[v]) s.insert(c[to]); ok[v] &= s.size() == g[v].size(); } vector<int> beechtree(int n, int m, vector<int> P, vector<int> C) { for (ll i = 1; i <= n; i++) p[i] = P[i - 1] + 1, c[i] = C[i - 1]; for (ll i = 2; i <= n; i++) g[p[i]].push_back(i); { vector<ll> b; for (ll i = 1; i <= n; i++) b.push_back(c[i]); sort(b.begin(), b.end()); b.resize(unique(b.begin(), b.end()) - b.begin()); for (ll i = 1; i <= n; i++) c[i] = lower_bound(b.begin(), b.end(), c[i]) - b.begin(); m = b.size() - 1; } dfs(1); for (ll i = 1; i <= n; i++) { if (!ok[i]) { ans.push_back(0); continue; } if (g[i].size() <= 1) ans.push_back(1); else { ll cnt = 0; for (ll to : g[i]) cnt += g[to].size() > 1; if (cnt > 1) ans.push_back(0); else if (cnt == 0) ans.push_back(1); else { for (ll to : g[i]) if (g[to].size() > 1) { set<ll> s, s1; for (ll to : g[i]) s.insert(c[to]); for (ll x : g[to]) s1.insert(c[x]); bool ok = true; for (ll i : s1) ok &= s.count(i); ans.push_back(ok); } } } } 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...