제출 #1151395

#제출 시각아이디문제언어결과실행 시간메모리
1151395jasonic9월 (APIO24_september)C++20
100 / 100
268 ms15084 KiB
#include "september.h"
#include <bits/stdc++.h>

using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
    // we iteratively go through each 
    unordered_map<long long, vector<long long>> adjList;

    for(long long i = 1; i < N; i++) {
        adjList[F[i]].push_back(i);
    }

    unordered_set<long long> seen;
    vector<long long> counts(N, 0);
    long long ans = 0;

    for(long long i = 0; i < N-1; i++) {
        for(long long j = 0; j < M; j++) {
            if(counts[S[j][i]] == 0) {
                // bfs to find which other nodes we have to track
                stack<long long> bfs;
                bfs.emplace(S[j][i]);
                while(bfs.size()) {
                    long long curr = bfs.top(); bfs.pop();
                    for(auto k : adjList[curr]) {
                        if(counts[k] == 0) {
                            bfs.emplace(k);
                        }
                    }
                    seen.emplace(curr);
                }
            }
            counts[S[j][i]]++;
            if(counts[S[j][i]] == M) {
                seen.erase(S[j][i]);
            }
        }
        if(seen.empty()) ans++;
    }

    return ans;
}
#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...