Submission #1160041

#TimeUsernameProblemLanguageResultExecution timeMemory
1160041jer033September (APIO24_september)C++20
100 / 100
121 ms11748 KiB
#include "september.h"
#include <algorithm>
#include <utility>
#include <vector>
using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {

	vector<int> allowed (N-1, 1);
	vector<int> occurrences (N, 0);
	int bad = 0;
	for (int i=0; i<(N-1); i++)
	{
		for (int j=0; j<M; j++)
		{
			occurrences[S[j][i]]++;
			if (occurrences[S[j][i]] == 1)
				bad++;
			if (occurrences[S[j][i]] == M)
				bad--;
		}
		if (bad>0)
			allowed[i]=0;
	}

	vector< vector<int> > children (N);
	for (int i=1; i<N; i++)
	{
		children[F[i]].push_back(i);
	}
	vector<int> visited (N, 0);
	//0 unvisited
	//1 visited
	//2 visited my parent
	int count2 = 0;
	int answer = 0;

	for (int i=0; i<(N-1); i++)
	{
		int curr = S[0][i];
		if (visited[curr]==2)
			count2--;
		visited[curr]=1;
		for (int j: children[curr])
			if (visited[j]!=1)
			{
				visited[j]=2;
				count2++;
			}
		if ((count2==0) and (allowed[i]==1))
			answer++;
	}
	return answer;
}
#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...