#include <bits/stdc++.h>
using namespace std;
#define iloop(x, n) for (long long i = x; i < n; ++i)
#define jloop(x, n) for (long long j = x; j < n; ++j)
#define kloop(x, n) for (long long k = x; k < n; ++k)
#define dloop(x, n) for (long long d = x; d >= n; --d)
#define ll long long
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<long long>
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define int long long
#define endl '\n'
#define g0(a) get<0>(a)
#define g1(a) get<1>(a)
#define g2(a) get<2>(a)
#define g3(a) get<3>(a)
#define dg(x) cout << #x << ": " << x << endl
#define all(x) x.begin(), x.end()
#define FASTIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
int32_t main(){
FASTIO
int n; cin >> n;
vector<vi> p(n+1);
vector<vi> c(n+1);
int mustbe = 0;
iloop(1, n+1){
int k; cin >> k;
if (k == 0) mustbe = i;
jloop(0, k){
int cur; cin >> cur;
p[i].pb(cur);
c[cur].pb(i);
}
}
int ans = INT_MAX;
int d[n+1];
jloop(1, n+1){
int root = j;
iloop(0, n+1) d[i] = 0;
int vis = 1;
d[root] = 1;
int cans = 1;
queue<int> q;
q.push(root);
while (!q.empty()){
int cur = q.front(); q.pop();
for (auto it : c[cur]){
if (d[it] != 0) continue;
vis++;
q.push(it);
cans += d[cur] + 1;
d[it] = d[cur] + 1;
}
}
if (vis != n) continue;
//cout << "ROOT IS " << root << endl;
//cout << "CANS IS " << cans << endl;
if (mustbe == j){
cout << cans;
return 0;
}
ans = min(ans, cans);
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |