제출 #1280169

#제출 시각아이디문제언어결과실행 시간메모리
1280169ducanh0811Bosses (BOI16_bosses)C++20
0 / 100
2 ms572 KiB
#include <bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, a, b) for (int i = (a), _b = (b); i >= _b; --i)
using namespace std;

#define MAXN 5005
vector<int> g[MAXN];
vector<int> adj[MAXN];
int n;
int vi[MAXN];
int dp[MAXN];

void DP(int u){
    for(int &x : adj[u]){
        DP(x);
        dp[u] += dp[x];
    }
    dp[u]++;
}

void solve(){
    cin >> n;
    FOR(i, 1, n){
        int k; cin >> k;
        FOR(j, 1, k){
            int x; cin >> x;
            g[x].push_back(i);
        }
    }
    int res = 1e15;
    FOR(root, 1, n){
        FOR(i, 1, n){
            adj[i].clear();
            dp[i] = 0;
        }
        deque<int> dq;
        dq.push_back(root);
        vi[root] = root;
        while (dq.size()){
            int cur = dq.front();
            dq.pop_front();
            for (int &x : g[cur]){
                if (vi[x] == root) continue;
                vi[x] = root;
                adj[cur].push_back(x);
                dq.push_back(x);
            }
        }
        DP(root);
        int sum = 0;
        FOR(i, 1, n) sum += dp[i];
        res = min(res, sum);
    }
    cout << res;
}

int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...