/*#include <vector>
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S);
#include "september.h"
#include <cassert>
#include <cstdio>
#include <vector>
void taskcase() {
int N, M;
assert(2 == scanf("%d%d", &N, &M));
std::vector<int> F(N);
F[0] = -1;
for (int i = 1; i < N; ++i)
assert(1 == scanf("%d", &F[i]));
std::vector<std::vector<int>> S(M, std::vector<int>(N - 1));
for (int i = 0; i < M; ++i)
for (int j = 0; j < N - 1; ++j)
assert(1 == scanf("%d", &S[i][j]));
printf("%d\n", solve(N, M, F, S));
}
int main() {
int T;
assert(1 == scanf("%d", &T));
while(T--) taskcase();
return 0;
}
*/
#include "september.h"
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> g;
vector<int> child;
vector<int> parent;
vector<int> erased;
set<int> temp;
void dfs(int node){
child[node]=g[node].size();
for(int i:g[node]) dfs(i);
}
void erase1(int node){
if(!erased[node]) return;
//cout << node << " " << child[node] << "\n";
if(child[node]==0){
child[parent[node]]--;
if(temp.find(node)!=temp.end()) temp.erase(node);
erase1(parent[node]);
} else{
temp.insert(node);
}
}
int solve(int N, int M, vector<int> F, vector<vector<int>> S) {
temp.clear();erased.clear();g.clear();child.clear();
erased.resize(N);g.resize(N);child.resize(N);
parent=F;
int ret=0;
map<int,int> chk1;
for(int i=1;i<N;i++) g[F[i]].push_back(i);
dfs(0);
for(int i=0;i<N-1;i++){
for(int j=0;j<M;j++){
chk1[S[j][i]]++;
if(chk1[S[j][i]]==M) chk1.erase(S[j][i]);
}
erased[S[0][i]]=1;
erase1(S[0][i]);
//cout << i << " " << chk1.size() << " " << temp.size() << "\n";
if(!chk1.empty() || !temp.empty()) continue;
ret++;
}
return ret;
}
| # | 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... |