제출 #1362534

#제출 시각아이디문제언어결과실행 시간메모리
1362534opeleklanos9월 (APIO24_september)C++20
55 / 100
1095 ms1264 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;

#include "september.h"

vector<vector<int>> adj;
vector<int> subtreeSize;
vector<int> subtreeSum;
set<int> picked;

void findSize(int st){
    for(auto i : adj[st]) findSize(i);
    int ans = 1;
    for(auto i : adj[st]) ans += subtreeSize[i];
    subtreeSize[st] = ans;
}

void dfs(int st){
    for(auto i : adj[st]) dfs(i);
    subtreeSum[st] = (picked.find(st) != picked.end());
    for(auto i : adj[st]) subtreeSum[st] += subtreeSum[i];
}

int solve(int N, int M, vector<int> F, vector<vector<int>> S){
    picked.clear();
    adj.assign(N, {});
    subtreeSize.assign(N, 0);
    for(int i = 1; i<N; i++) adj[F[i]].push_back(i);
    findSize(0);

    int ans = 0;
    for(int i = 0; i<N-1; i++){
        for(int j = 0; j<M; j++) picked.insert(S[j][i]);
        if(picked.size() == i+1){
            subtreeSum.assign(N, 0);
            dfs(0);
            int addAns = 1;
            for(auto k:picked) if(subtreeSize[k] != subtreeSum[k]) addAns = 0;
            ans += addAns;
        }
    }

    return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…