제출 #1368490

#제출 시각아이디문제언어결과실행 시간메모리
1368490idonoamSeptember (APIO24_september)C++17
0 / 100
0 ms344 KiB
#include "september.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S)
{
    vector<vector<int>> sons(N);
    for (int i = 1; i < N; i++)
    {
        sons[F[i]].push_back(i);
    }
    vector<int> vis(N, 0);
    int op = 0, z = 0;
    for (int i = 0; i < N - 1; i++)
    {
        if (!z)
            op++;
        for (int k = 0; k < M; k++)
        {
            if (vis[S[k][i]])
            {
                vis[S[k][i]]--;
                if (!vis[S[k][i]])
                    z--;
            }
            else
            {
                vis[S[k][i]] = true;
                stack<int> st;
                st.push(S[k][i]);

                while (st.size())
                {
                    int c = st.top();
                    st.pop();
                    vis[c] = M;
                    z++;
                    for (int j = 0; j < sons[c].size(); j++)
                    {
                        if (!vis[sons[c][j]])
                        {
                            st.push(sons[c][j]);
                        }
                    }
                }
                vis[S[k][i]]--;
                if (!vis[S[k][i]])
                    z--;
            }
        }
    }
    return op;
}
/*
void taskcase()
{
    int N, M;
    assert(2 == scanf("%d%d", &N, &M));

    std::vector<int> F(N);
    F[0] = -1;
    for (int i = 1; i < N; ++i)
        assert(1 == scanf("%d", &F[i]));

    std::vector<std::vector<int>> S(M, std::vector<int>(N - 1));
    for (int i = 0; i < M; ++i)
        for (int j = 0; j < N - 1; ++j)
            assert(1 == scanf("%d", &S[i][j]));

    printf("%d\n", solve(N, M, F, S));
}

int main()
{
    int T;
    assert(1 == scanf("%d", &T));
    while (T--)
        taskcase();
    return 0;
}

/*
1
3 1
0 0
1 2

1
5 2
0 0 1 1
1 2 3 4
4 1 2 3
*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…