제출 #1162508

#제출 시각아이디문제언어결과실행 시간메모리
1162508alexander7070709월 (APIO24_september)C++20
100 / 100
75 ms6708 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; const long long mod=1e9+9; int n,m,bad,ans; int parent[MAXN],deg[MAXN]; long long hesh[10],power[MAXN]; bool in[MAXN]; void reset_hesh(){ for(int i=0;i<m;i++)hesh[i]=0; } int solve(int N, int M, vector<int> F,vector< vector<int> > S){ n=N; m=M; ans=0; for(int i=0;i<n;i++){ in[i]=false; deg[i]=0; } reset_hesh(); for(int i=0;i<n;i++){ parent[i]=F[i]; if(parent[i]!=-1)deg[parent[i]]++; } power[0]=1; for(int i=1;i<n;i++)power[i]=(power[i-1]*2)%mod; for(int i=0;i<n-1;i++){ for(int f=0;f<m;f++){ if(f==0){ deg[parent[S[f][i]]]--; if(in[parent[S[f][i]]])bad--; in[S[f][i]]=true; bad+=deg[S[f][i]]; } hesh[f]+=power[S[f][i]]; } for(int f=0;f<m;f++){ if(f<m-1 and hesh[f]!=hesh[f+1])break; if(f==m-1 and bad==0){ ans++; reset_hesh(); } } } return ans; } /*int main(){ cout<<solve(3, 1, {-1, 0, 0}, {{1, 2}})<<"\n"; cout<<solve(5, 2, {-1, 0, 0, 1, 1}, {{1, 2, 3, 4}, {4, 1, 2, 3}})<<"\n"; return 0; }*/
#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...