Submission #1226702

#TimeUsernameProblemLanguageResultExecution timeMemory
1226702SpyrosAlivSeptember (APIO24_september)C++20
45 / 100
85 ms2848 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> par;

int solve(int N, int M, vector<int> F, vector<std::vector<int>> S) {
	n = N;
	m = M;
	assert(m == 1);
	par = F;
	vector<int> cnt(n, 0);
	vector<bool> inside(n, false);
	for (int i = 1; i < n; i++) cnt[par[i]]++;
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
	int tot = 0;
	for (auto x: S[0]) {
		pq.push({cnt[x], x});
		inside[x] = true;
		while (!pq.empty()) {
			if (cnt[pq.top().second] != pq.top().first) {
				pq.pop();
				continue;
			}
			int curr = pq.top().second;
			if (cnt[curr] == 0) {
				pq.pop();
				cnt[par[curr]]--;
				if (inside[par[curr]]) pq.push({cnt[par[curr]], par[curr]});
				continue;
			}
			break;
		}
		if (pq.empty()) tot++;
	}
	return tot;
}	
#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...