제출 #1306398

#제출 시각아이디문제언어결과실행 시간메모리
1306398kyrylBosses (BOI16_bosses)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h>
#define un unsgined
#define rep(i, a, b) for(int i = a; i < b; i++)
#define per(i, a, b) for(int i = a; i >= b; i--)
#define all(v) begin(v), end(v)
#define st first
#define nd second
using ll = long long;
using bigi = __int128;
using namespace std;
const ll N = 5005;
vector<ll> dzie[N];
vector<ll> G[N];
ll war[N];
bool byl[N];
void policz_war(ll v, ll p){
    ll suma = 0;
    for(auto i : G[v]){
        if(p == i) continue;
        policz_war(i, v);
        suma += war[i];
    }
    war[v] = suma + 1;
}
ll policz(ll n, ll v){
    fill(byl, byl + n + 1, 0);
    rep(i, 0, n + 1){
        G[i].clear();
    }
    byl[v] = true;
    queue<ll> q;
    q.push(v);
    while(!q.empty()){
        ll s = q.front();
        q.pop();
        for(auto i : dzie[s]){
            // cout << s << ' ' << i << endl;
            if(!byl[i]){
                byl[i] = true;
                q.push(i);
                G[i].push_back(s);
                G[s].push_back(i);
            }
        }
    }
    policz_war(v, v);
    ll odp = 0;
    rep(i, 1, n + 1){
        odp += war[i];
    }
    return odp;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll n;
    cin >> n;
    rep(i, 1, n + 1){
        ll k;
        cin >> k;
        rep(j, 0, k){
            ll a;
            cin >> a;
            dzie[a].push_back(i);
        }
    }
    ll mini = 1e18 + 5;
    rep(i, 1, n + 1){
        mini = min(mini, policz(n, i));
    }
    cout << mini << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...