Submission #1292096

#TimeUsernameProblemLanguageResultExecution timeMemory
1292096Hamed_GhaffariSeptember (APIO24_september)C++20
100 / 100
102 ms10984 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;

const int MXN = 1e5 + 5;

vector<int> g[MXN];
int cnt[MXN];
bool mark[MXN];

int solve(int N, int M, vector<int> F, vector<vector<int>> S) {
	for(int i=0; i<N; i++) g[i].clear(), cnt[i] = 0, mark[i] = 0;
	for(int i=1; i<N; i++) g[F[i]].push_back(i);
	int ans=0, dad=0, nt=0;
	auto add = [&](int v) {
		if(cnt[v]==0) nt++;
		cnt[v]++;
		if(cnt[v]==M) nt--;
		if(mark[v]) return;
		if(v && mark[F[v]]) dad--;
		mark[v] = 1;
		for(int u : g[v])
			if(!mark[u])
				dad++;
	};
	for(int l=0; l<N-1;) {
		ans++;
		for(int i=0; i<M; i++) add(S[i][l]);
		int r=l;
		while(nt || dad) {
			r++;
			for(int i=0; i<M; i++)
				add(S[i][r]);
		}
		l = r+1;
	}
	return ans;
}
#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...