Submission #1065558

#TimeUsernameProblemLanguageResultExecution timeMemory
1065558cpdreamerBeech Tree (IOI23_beechtree)C++17
9 / 100
32 ms9292 KiB
#include "beechtree.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define V vector #define S second #define F first #define pb push_back #define all(v) v.begin(),v.end() using namespace std; V<pair<int,int>>adj[(int)10]; V<V<pair<int,int>>>nodes(10); V<int>b(10); V<int>parent; V<int>color; bool check(V<pair<int,int>>permutation){ if(permutation[0].S!=0) return false; int size=(int)permutation.size(); for(int i=size-1;i>0;i--){ int c=0; for(int j=i-1;j>=0;j--){ if(permutation[j].S==permutation[i].S){ c++; } } if(permutation[c].F!=parent[permutation[i].F]){ return false; } } return true; } void dfs(int n,int p){ nodes[n].pb({n,0}); for(auto u:adj[n]){ if(u.F==p)continue; dfs(u.F,n); nodes[u.F][0].S=color[u.F]; nodes[n].insert(nodes[n].end(),all(nodes[u.F])); nodes[u.F][0].S=0; } sort(all(nodes[n])); if(nodes[n].size()==1){ b[n]=1; return; } do{ if(check(nodes[n])){ b[n]=1; return; } }while(next_permutation(all(nodes[n]))); b[n]=0; } std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C) { for(int i=1;i<N;i++){ adj[P[i]].pb({i,C[i]}); adj[i].pb({P[i],C[i]}); } for(int i=0;i<N;i++) parent.pb(P[i]); for(int i=0;i<N;i++) color.pb(C[i]); dfs(0,-1); V<int>ans; for(int i=0;i<N;i++) ans.pb(b[i]); 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...