Submission #374021

#TimeUsernameProblemLanguageResultExecution timeMemory
374021vishesh312Bosses (BOI16_bosses)C++17
100 / 100
873 ms748 KiB
#include "bits/stdc++.h"
using namespace std;
/*
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using ordered_set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;
*/

#define all(x) begin(x), end(x)
#define sz(x) (int)x.size()

using ll = long long;
const int mod = 1e9+7;

vector<vector<int>> adj;
vector<bool> vis;
ll cost;
int n, cur;

void dfs(int u, ll c) {
    vis[u] = true;
    ++cur;
    cost += c;
    for (auto v : adj[u]) {
        if (!vis[v]) {
            dfs(v, c+1);
        }
    }
}

void bfs(int s) {
    queue<array<ll, 2>> q;
    q.push({s, 1});
    vis[s] = true;
    while (!q.empty()) {
        int u = q.front()[0], d = q.front()[1];
        q.pop();
        ++cur;
        cost += d;
        for (auto v : adj[u]) {
            if (!vis[v]) {
                vis[v] = true;
                q.push({v, d+1});
            }
        }
    }
}

void solve(int tc) {
    cin >> n;
    adj.resize(n);
    vis.resize(n);
    for (int i = 0; i < n; ++i) {
        int m;
        cin >> m;
        while (m--) {
            int u;
            cin >> u;
            --u;
            adj[u].push_back(i);
        }
    }
    ll ans = 1e16;
    for (int i = 0; i < n; ++i) {
        fill(all(vis), false);
        cost = 0, cur = 0;
        bfs(i);
        if (cur == n) ans = min(ans, cost);
    }
    cout << ans << '\n';
}

signed main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int tc = 1;
    //cin >> tc;
    for (int i = 1; i <= tc; ++i) solve(i);
    return 0;
}

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