제출 #1305371

#제출 시각아이디문제언어결과실행 시간메모리
1305371JerBosses (BOI16_bosses)C++20
0 / 100
1 ms568 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 5005;
vector<int> con[MAXN], pos[MAXN];
bool used[MAXN];
int val[MAXN];
int n, m;

void clear()
{
    for (int i = 0; i <= n; i++)
        con[i].clear(), used[i] = false, val[i] = 0;
}

void create(int curr)
{
    used[curr] = true;
    for (auto i : pos[curr])
        if (!used[i])
            con[curr].push_back(i);

    for (auto i : con[curr])
        create(i);
}

bool connected()
{
    for (int i = 1; i <= n; i++)
        if (!used[i])
            return false;
    return true;
}

int dfs(int curr)
{
    int sub = 0;
    for (auto i : con[curr])
        sub += dfs(i);

    return val[curr] = sub + 1;
}

int get_sum()
{
    int sum = 0;
    for (int i = 1; i <= n; i++)
        sum += val[i];
    return sum;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;

    for (int i = 1; i <= n; i++)
    {
        cin >> m;
        int p;
        for (int j = 0; j < m; j++)
            cin >> p, pos[p].push_back(i);
    }

    int res = INT_MAX;
    for (int i = 1; i <= n; i++)
    {
        clear();
        create(i);
        if (connected())
            dfs(i), res = min(res, get_sum());
    }

    cout << res << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...