Submission #1061912

#TimeUsernameProblemLanguageResultExecution timeMemory
1061912mychecksedad참나무 (IOI23_beechtree)C++17
8 / 100
82 ms55736 KiB
#include "beechtree.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define all(x) x.begin(),x.end() #define ll long long #define ff first #define ss second #define vi vector<int> const int N = 200005; const ll INF = 1e18; vector<int> g[N], s[N]; vi res; int antidep[N], col[N], n, m, par[N]; bool ok = 1; void dfs(int v){ set<int> s; antidep[v] = 0; int co = 0, node; for(int u: g[v]){ dfs(u); par[u] = v; s.insert(col[u]); antidep[v] = max(antidep[u] + 1, antidep[v]); if(g[u].size() > 0) co++, node = u; } // cout << v << ' ' << antidep[v] << '\n'; if(g[v].size() == 0){ res[v] = 1; }else if(s.size() == g[v].size() && antidep[v] == 1){ res[v] = 1; }else{ if(antidep[v] > 2){ res[v] = 0; }else{ if(co == 1){ for(int x: g[node]){ s.insert(col[x]); } if(s.size() == g[v].size()){ res[v] = 1; }else{ res[v] = 0; } }else{ res[v] = 0; } } } } std::vector<int> beechtree(int nn, int mm, std::vector<int> P, std::vector<int> C) {n=nn, m=mm; res.resize(n); for(int i = 1; i < n; ++i){ g[P[i]].pb(i); col[i] = C[i]; } // dfs(0); // bool ok = 1; // res[n - 1] = 1; // for(int i = n - 2; i >= 0; --i){ // if(ok == 0){ // res[i] = ok; // }else if(C[i] != C[i + 1]){ // res[i] = 1; // ok = 0; // }else{ // res[i] = 1; // } // } dfs(0); return res; }
#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...