#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
vector<int> con[MAXN], pos[MAXN];
bool used[MAXN];
int val[MAXN];
int n, m;
void clear()
{
for (int i = 0; i <= n; i++)
con[i].clear(), used[i] = false, val[i] = 0;
}
void create(int curr)
{
used[curr] = true;
for (auto i : pos[curr])
if (!used[i])
con[curr].push_back(i);
for (auto i : con[curr])
create(i);
}
bool connected()
{
for (int i = 1; i <= n; i++)
if (!used[i])
return false;
return true;
}
int dfs(int curr)
{
int sub = 0;
for (auto i : con[curr])
sub += dfs(i);
return val[curr] = sub + 1;
}
int get_sum()
{
int sum = 0;
for (int i = 1; i <= n; i++)
sum += val[i];
return sum;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> m;
int p;
for (int j = 0; j < m; j++)
cin >> p, pos[p].push_back(i);
}
int res = INT_MAX;
for (int i = 1; i <= n; i++)
{
clear();
create(i);
if (connected())
dfs(i), res = min(res, get_sum());
}
cout << res << '\n';
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... |