Submission #884351

#TimeUsernameProblemLanguageResultExecution timeMemory
884351vjudge1Bosses (BOI16_bosses)C++17
100 / 100
812 ms1088 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define pb push_back
#define pll array<ll, 2>
#define int long long

const int N = 5e3 + 4;
const ll INF = 1LL << 62;

int n;
bool vis[N];
vector<int> in[N], g[N];

pll dfs(int v) {
    pll ret = {0, 0};
    for (int u : g[v]) {
        pll res = dfs(u);
        ret[0] += res[0];
        ret[1] += res[1];
    }
    ++ret[0];
    ret[1] += ret[0];
    return ret;
}

ll bfs(int s) {
    queue<int> q;
    q.push(s);
    vis[s] = true;

    while (q.size() > 0) {
        int v = q.front();
        q.pop();
        for (int u : in[v]) {
            if (vis[u] == false) {
                vis[u] = true;
                g[v].pb(u);
                q.push(u);
            }
        }
    }
    return dfs(s)[1];
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for (int i = 0; i < n; ++i) {
        int k;
        cin >> k;
        while (k--) {
            int v;
            cin >> v;
            --v;
            in[v].pb(i);
        }
    }

    ll ans = INF;
    for (int i = 0; i < n; ++i) {
        ll res = bfs(i);
        bool seeAll = true;
        for (int j = 0; j < n; ++j) {
            seeAll &= vis[j];
            g[j].clear();
            vis[j] = false;
        }
        if (seeAll == true) {
            ans = min(ans, res);
        }
    }
    cout << ans;

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...