Submission #1349748

#TimeUsernameProblemLanguageResultExecution timeMemory
1349748blameazuSeptember (APIO24_september)C++20
25 / 100
1095 ms456 KiB
#include "september.h"

#include <bits/stdc++.h>
using namespace std;

int solve(int n, int m, vector<int> F, vector<vector<int> > S) {
	int ans = 1;
	vector<int> order(n-1);
	iota(order.begin(), order.end(), 1);
	vector<int> in(n);
	for(int i = 1; i < n; i++) in[F[i]]++;
	do {
		// check
		{
			int ok = 1;
			auto tmp_in = in;
			for(auto &d : order) {
				if(tmp_in[d] > 0) {
					ok = 0;
					break;
				}
				tmp_in[F[d]]--;
			}
			if(!ok) continue;
		}
		// count for K
		int K = 0;
		vector<int> ptr(m);
		int order_id = 0;
		while(order_id < n-1) {
			vector<set<int> > se(m);
			while(true) {
				for(int i = 0; i < m; i++)
					se[i].insert(order[order_id]);
				order_id++;
				for(int i = 0; i < m; i++) 
					while(ptr[i] < (int)S[i].size()) {
						if(se[i].count(S[i][ptr[i]])) {
							se[i].erase(S[i][ptr[i]]);
							ptr[i]++;
						} else break;
					}
				int con = 0;
				for(auto &d : se) con |= (int)d.size() > 0;
				if(!con) break;
			}
			K++;
		}
		ans = max(ans, K);
	} while(next_permutation(order.begin(), order.end()));
	return ans;
}

/*
10! = 3628800
*/
#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...