#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
priority_queue<pair<pair<int, int>, int> > q;
vector<int> adj[200005], p, c, ans;
int sz[200005], n, m, t;
void calc(int u)
{
sz[u]=1;
for (int v:adj[u])
{
calc(v);
sz[u]+=sz[v];
}
}
int solve(int x)
{
//cout << "solve " << x << '\n';
vector<int> perm, mp(n, 0), freq(m+1, 0);
q.push({{sz[x], t=0}, x});
while (!q.empty())
{
int u=q.top().second;
q.pop();
mp[u]=perm.size();
perm.push_back(u);
//cout << "perm " << u << '\n';
for (int v:adj[u])
q.push({{sz[v], --t}, v});
}
for (int i=1; i<perm.size(); i++)
{
if (mp[p[perm[i]]]!=(freq[c[perm[i]]]++))
return 0;
//cout << "check ok " << i << '\n';
}
return 1;
}
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]].push_back(i);
calc(0);
for (int i=0; i<n; i++)
ans.push_back(solve(i));
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |