#include "september.h"
#include <vector>
#include <map>
#include <iostream>
struct node {
std::vector<int> chl;
int son = 0;
};
int n, m;
std::map<int, int> map;
void get(int leaf, node tree[]){
//std::cout << "Pos: "<< leaf <<'\n';
if(map.find(leaf)==map.end()){
map[leaf] = m;
if(tree[leaf].son){
for(int x : tree[leaf].chl){
get(x, tree);
}
tree[leaf].son=0;
}
}
return;
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
map.clear();
int ans = 0;
n = N;
m = M;
node tree[n];
for(int i = 1; i<n; ++i){
tree[F[i]].chl.push_back(i);
++tree[F[i]].son;
}
for(int i = 0; i<n-1; ++i){
for(int j = 0; j<m; ++j){
//std::cout << j << ':' << i <<'\n';
int leaf = S[j][i];
//std::cout << leaf << '\n';
get(leaf, tree);
--map[leaf];
if(map[leaf]==0){
//map.erase(map.find([leaf]));
//std::cout << map.size()<<" siz1\n";
map.erase(leaf);
//std::cout << map.size()<<" siz2\n";
}
if(map.empty()){
++ans;
}
}
}
//std::cout << ans<<" ans\n";
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... |