Submission #1222093

#TimeUsernameProblemLanguageResultExecution timeMemory
1222093thelegendary08참나무 (IOI23_beechtree)C++17
9 / 100
180 ms57388 KiB
#include "beechtree.h" #include<bits/stdc++.h> #define int long long #define f0r(i,n) for(int i = 0; i<n; i++) #define pb push_back #define mp make_pair #define vi vector<int> #define mii map<int,int> #define pii pair<int,int> #define vpii vector<pii> #define FOR(i, k, n) for(int i = k; i<n; i++) #define vb vector<bool> using namespace std; vector<vi>adj, colset; vi dep, sts, die, diesum; int dfs(int node){ int cur = 1; for(auto u : adj[node]){ dep[u] = dep[node] + 1; cur += dfs(u); } sts[node] = cur; return cur; } int d2(int node){ int cur = die[node]; for(auto u : adj[node]){ cur += d2(u); } diesum[node] = cur; return cur; } std::vector<signed> beechtree(signed N, signed M, std::vector<signed> P, std::vector<signed> C) { vector<signed>ans(N); FOR(i, 1, N)ans[i] = 1; colset.clear(); colset.resize(N); adj.clear(); adj.resize(N); dep.clear(); dep.resize(N); sts.clear(); sts.resize(N); die.clear(); die.resize(N); diesum.clear(); diesum.resize(N); FOR(i, 1, N){ adj[P[i]].pb(i); } f0r(i, N){ set<int>tmp; for(auto u : adj[i]){ tmp.insert(C[u]); colset[i].pb(C[u]); } if(tmp.size() != colset[i].size()){ die[i] = 1; } } dfs(0); d2(0); vpii w; f0r(i, N){ w.pb(mp(colset[i].size(), -i)); } sort(w.rbegin(), w.rend()); /* f0r(i, N){ cout<<w[i].first<<' '<<w[i].second<<'\n'; } */ bool ok = 1; if(w[0].second != 0)ok = 0; set<int>vis; f0r(i, M){ vis.insert(i + 1); } f0r(i, N){ set<int>ne; for(auto u : colset[-w[i].second]){ if(!vis.count(u))ok = 0; ne.insert(u); } /* for(auto u : vis)cout<<u<<' '; cout<<'\n'; for(auto u : ne)cout<<u<<' '; cout<<'\n'; */ if(!ok)break; vis = ne; } if(ok)ans[0] = 1; f0r(i, N){ if(diesum[i] != 0)ans[i] = 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...