#include "september.h"
#include <bits/stdc++.h>
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;
using ll = long long;
pii p = {47,59};
pii mod = {1e9+7,998244353};
int exp(ll x,ll a,ll mod)
{
ll ans = 1;
for (;a>0;a/=2,x=x*x%mod)
if(a%2) ans=ans*x%mod;
return ans%mod;
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
int n=N,m=M;
auto par = F;
auto s = S;
vector<int> del(n,0);
vector<vector<int>> graph(n);
for (int i = 1; i < n; i++)
graph[par[i]].push_back(i);
int cnt = 0;
function<void(int)> dfs = [&](int cur)
{
if (del[cur])return;
cnt++;
del[cur] =1;
for(int a : graph[cur])
dfs(a);
};
vector<pii> hash(m);
int ans = 0;
for (int i = 0; i < n-1; i++)
{
dfs(s[0][i]);
for (int j = 0; j < m; j++)
{
hash[j].ff+=exp(p.ff,s[j][i],mod.ff);
hash[j].ff%=mod.ff;
hash[j].ss+=exp(p.ss,s[j][i],mod.ss);
hash[j].ss%=mod.ss;
}
bool bad = 0;
for (int j = 1; j <m;j++)
if(hash[j]!=hash[j-1])
bad = 1;
if(cnt==i+1 &&!bad)
ans++;
}
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... |