Submission #1159604

#TimeUsernameProblemLanguageResultExecution timeMemory
1159604LolkasMeepSeptember (APIO24_september)C++20
100 / 100
508 ms28264 KiB
#include "bits/stdc++.h"
using namespace std;

typedef long long int ll;



int solve(int N, int M, vector<int> F,vector<vector<int>> S){
    vector<unordered_set<int>> adjList(N);
    for(int i = 1; i < N; i++){
        adjList[i].insert(F[i]);
        adjList[F[i]].insert(i);
    }

    vector<int> leafToIndex(N,-1);
    for(int i = 0; i < N-1; i++){
        leafToIndex[S[0][i]] = i;
    }

    vector<bool> visited(N);  
    visited[0] = true;

    int counts = 0;

    int components = 1;

    int minIndex = N;

    for(int i = N-2; i >= 0; i--){
        components++;
        int node = S[0][i];

        for(const int &adjNode : adjList[node]){
            if(visited[adjNode]) components--;
        }

        // cout << i << " " << components << '\n';

        for(int j = 0; j < M; j++) minIndex = min(minIndex, leafToIndex[S[j][i]]);

        if(components == 1 && minIndex >= i){
            counts++;
        }
        visited[node] = true;
    }

    return counts;
}

// int main(){

//     cout << "poop\n";

//     cout << solve(5, 2, {-1, 0, 0, 1, 1}, {{1, 2, 3, 4}, {4, 1, 2, 3}}) << '\n';

//     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...