Submission #1368470

#TimeUsernameProblemLanguageResultExecution timeMemory
1368470idonoam9월 (APIO24_september)C++17
45 / 100
115 ms7892 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);
    }
    int ans = 1e9;
    for (int k = 0; k < M; k++)
    {
        vector<int> vis(N, 0);
        int op = 0, z = 0;
        for (int i = 0; i < N - 1; i++)
        {
            if (!z)
                op++;
            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();
                    for (int j = 0; j < sons[c].size(); j++)
                    {
                        if (!vis[sons[c][j]])
                        {
                            z++;
                            st.push(sons[c][j]);
                            vis[sons[c][j]] = true;
                        }
                    }
                }
            }
        }
        ans = min(ans, op);
    }
    return ans;
}
/*
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
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...