제출 #1160176

#제출 시각아이디문제언어결과실행 시간메모리
1160176pensiveSeptember (APIO24_september)C++20
55 / 100
1048 ms11792 KiB
#include "september.h"
#include <unordered_set>
#include <vector>


using namespace std;
#define REP(a,i,n) for (int i=a;i<n;i++)


void loadChildren(int N, vector<int> F, vector<vector<int>> &childs) {
	REP(1,i,N) {
		childs[F[i]].push_back(i);
	}
}

void including(int parent, vector<vector<int>> &childs, int visited[], unordered_set<int> &leafed) {
	visited[parent]=1;
	leafed.insert(parent);
	for (auto leaf : childs[parent]) {
		if (!visited[leaf]) {
			including(leaf, childs, visited, leafed);
		}
	}
}

int solve(int N, int M, vector<int> F, vector<vector<int>> S) {
	unordered_set<int> leafed;
	vector<vector<int>> childs(200001);
	int freq[200001], visited[200001];
	int K=0;
	fill(freq, freq+200001, 0); fill(visited, visited+200001, 0);
	loadChildren(N, F, childs);

	REP(0,i,N-1) {
		REP(0, log, M) {
			int leaf = S[log][i];
			freq[leaf]++;
			if (!visited[leaf]) {
				including(leaf, childs, visited, leafed);
			}
			if (freq[leaf]>=M) {
				leafed.erase(leaf);
			}
		}
		if (leafed.size()==0) {
			K++;
		}
	}
	return K;
}
#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...