#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |