Submission #1155715

#TimeUsernameProblemLanguageResultExecution timeMemory
1155715blackslexSeptember (APIO24_september)C++20
11 / 100
0 ms328 KiB
#include "september.h"
#include <vector>
#include<bits/stdc++.h>

using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	int n = N, m = M;
	vector<vector<int>> v(n, vector<int>());
	vector<vector<int>> pos(m, vector<int>(n));
	int t = -1;
	for (int i = 1; i < n; i++) {
		v[F[i]].emplace_back(i);
	}
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n - 1; j++) {
			pos[i][S[i][j]] = j;
		}
	}
	auto dfs = [&] (auto &&dfs, int cur, int par) -> void {
		for (auto &e: v[cur]) {
			if (par == e) continue;
			dfs(dfs, e, cur);
			for (int i = 0; i < m; i++) {
				pos[i][cur] = max(pos[i][cur], pos[i][e]);
			}
		}
	};
	dfs(dfs, 0, -1);
	int ans = 0;
	vector<int> ptr(m);
	for (int i = 0; ; i++) {
		int mx = -1;
		for (int j = 0; j < m; j++) {
			mx = max(mx, pos[j][S[j][ptr[j]]]);
		}
		for (int j = 0; j < m; j++) {
			ptr[j] = mx + 1;
		}
		ans++;
		if (mx + 1 >= n - 1) break;
	}
	return ans;
	return 0;
}
#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...