Submission #1151193

#TimeUsernameProblemLanguageResultExecution timeMemory
1151193TroySer9월 (APIO24_september)C++20
45 / 100
840 ms18844 KiB
#include "september.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

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

	vector<vector<ll> > adjList;
	adjList.resize(N);

	for (ll i = 1; i < N; i++) {
		adjList[F[i]].push_back(i);
	}

	set<ll> beenBanished;
	vector<int> firstS = S[0];

	map<ll, ll> actualIndex;
	for (ll i = 0; i < N - 1; i++) {
		actualIndex[firstS[i]] = i;
	}

	ll banishmentIndex = 0;
	ll maxK = 1;

	for (ll i = 0; i < N - 1; i++) {

		// cout << firstS[i] << " " << i << ", " << banishmentIndex << endl;

		if (banishmentIndex < i) {
			maxK++;
		}

		queue<ll> bfsQueue;
		bfsQueue.push(firstS[i]);

		while (!bfsQueue.empty()) {

			ll currentIndex = bfsQueue.front();
			bfsQueue.pop();
			if (beenBanished.find(currentIndex) != beenBanished.end()) {
				continue;
			}

			beenBanished.insert(currentIndex);
			banishmentIndex = max(banishmentIndex, actualIndex[currentIndex]);

			for (ll v: adjList[currentIndex]) {
				bfsQueue.push(v);
			}

		}

	}

	return maxK;

}
#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...