Submission #1349066

#TimeUsernameProblemLanguageResultExecution timeMemory
1349066nagorn_phSeptember (APIO24_september)C++20
45 / 100
113 ms13836 KiB
#include "september.h"
#include <bits/stdc++.h>
#define int long long
#define emb emplace_back
#define pii pair <int, int>
#define tiii tuple <int, int, int>
#define tdii tuple <double, int, int>
#define all(a) a.begin(), a.end()

using namespace std;

const int N = 1e5 + 5;
const double inf = 1e18;

int n, m;
vector <int> adj[N];

int32_t solve(int32_t Nn, int32_t M, std::vector<int32_t> F, std::vector<std::vector<int32_t>> S) {
	n = Nn;
	m = M;
	for (int i = 0; i < n; i++) adj[i].clear();
	for (int i = 1; i < n; i++) {
		adj[i].emb(F[i]);
		adj[F[i]].emb(i);
	}
	vector <int> pre[n];
	for (int u = 0; u < n; u++) {
		for (auto v : adj[u]) {
			if (v == F[u]) continue;
			pre[u].emb(v);
		}
	}
	set <int> cur;
	vector <bool> visited(n);
	int ans = 0;
	for (auto u : S[0]) {
		for (auto v : pre[u]) if (!visited[v]) cur.emplace(v);
		visited[u] = 1;
		if (cur.find(u) != cur.end()) cur.erase(u);
		if (cur.empty()) ans++;
	}
	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...