Submission #1047139

#TimeUsernameProblemLanguageResultExecution timeMemory
1047139ArturgoSeptember (APIO24_september)C++17
100 / 100
240 ms27780 KiB
#include "september.h" #include <bits/stdc++.h> using namespace std; int solve( int nbSommets, int nbOrdres, vector<int> parents, vector<vector<int>> ordres ) { vector<vector<int>> sommetsAvant(nbSommets); vector<vector<int>> sommetsApres(nbSommets); auto ajoute = [&](int avant, int apres) { sommetsAvant[apres].push_back(avant); sommetsApres[avant].push_back(apres); }; for(int u = 1;u < nbSommets;u++) { ajoute(u, parents[u]); } for(vector<int>& ordre : ordres) { for(int i = 1;i < (int)ordre.size();i++) { ajoute(ordre[i - 1], ordre[i]); } } vector<bool> estVu(nbSommets, false); vector<int> postOrdre; auto calc_ordre = [&](auto self, int u) -> void { if(estVu[u]) return; estVu[u] = true; for(int v : sommetsAvant[u]) { self(self, v); } postOrdre.push_back(u); }; calc_ordre(calc_ordre, 0); fill(estVu.begin(), estVu.end(), false); auto calc_cfc = [&](auto self, int u) -> void { if(estVu[u]) return; estVu[u] = true; for(int v : sommetsApres[u]) { self(self, v); } }; int nbCFC = 0; while(!postOrdre.empty()) { int u = postOrdre.back(); postOrdre.pop_back(); if(!estVu[u]) { calc_cfc(calc_cfc, u); nbCFC++; } } return nbCFC - 1; }
#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...