Submission #1277271

#TimeUsernameProblemLanguageResultExecution timeMemory
1277271tasso7September (APIO24_september)C++20
100 / 100
135 ms12200 KiB
#include "september.h"
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<bool> caduti;

vector<vector<int>> adj;
int M;
vector<int> edv;

void DFS(int n){
	//cout<<"D:"<<n << endl;
	if(caduti[n]){return;}
	//cout << "=>" << endl;
	caduti[n] = true;
	for(int j = 0; j < M; j++){edv[j]++;}
	for(int k : adj[n]){DFS(k);}
	//cout << "-" << endl;
}

int solve(int N, int m, std::vector<int> F, std::vector<std::vector<int>> S) {
	M = m;
	//caso M = 1
	adj = vector<vector<int>>(N, vector<int>{});
	caduti=vector<bool>(N,false);
	for(int i = 1; i < N; i++){
		adj[F[i]].push_back(i);
	}

	edv = vector<int>(M, 0);
	vector<int> i = vector<int>(M, 0);

	int g = 0;
	
	while(*min_element(i.begin(), i.end()) < N-1){
		for(int j = 0; j < M; j++){
			if(i[j] == N-1){continue;}
			DFS(S[j][i[j]]);
			edv[j]--;
			i[j]++;
			break;
		}
		g++;
		while(*max_element(edv.begin(), edv.end()) > 0){
			for(int j = 0; j < M; j++){
				while(edv[j] != 0 && i[j] < N-1){
					DFS(S[j][i[j]]);
					edv[j]--;
					i[j]++;
				}
			}
		}
	}
	
	return g;
}
#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...