#include <bits/stdc++.h>
#define int long long
using namespace std;
const long long N = 5e3 + 5;
int a[N];
vector<int> graph[N];
bool vis[N];
int levels[N];
int n, m, e;
int bfs(int k)
{
fill(levels, levels + n + 1, 0);
fill(vis, vis + n + 1, 0);
queue<int> q;
q.push(k);
int visited = 0;
int level = 2;
levels[1] = 1;
while (q.size())
{
int k = q.front();
q.pop();
// if (vis[k])
// continue;
// cout << "k == " << k << endl;
vis[k] = 1;
visited++;
for (int i : graph[k])
{
if (vis[i])
continue;
vis[i] = 1;
// cout << i << ' ';
levels[level]++;
q.push(i);
}
// cout << endl;
level++;
}
if (visited != n)
{
return 1e18;
}
while (levels[level] == 0)
level--;
int ans = 0;
for (int i = level, j = 1; i >= 0; i--, j++)
{
// cout << i << " " << levels[i] << " " << j << endl;
ans += levels[i] * j;
}
return ans;
}
void solve()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> m;
for (int j = 0; j < m; j++)
{
cin >> e;
graph[e].push_back(i);
}
}
int ans = 1e18;
// for (int i = 1; i <= n; i++)
// {/
ans = min(ans, bfs(4));
cout << ans << endl;
// }
// for (int i = 0; i < n + 1; i++)
// {
// cout << "i = " << i << endl;
// for (auto j : graph[i])
// cout << j << ' ';
// cout << endl;
// }
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
// cin >> t;
for (int i = 1; i <= t; i++)
{
// cout << "Case #" << i << ':' << ' ';
solve();
cout << endl;
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |