# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1270171 | quangminh412 | Bosses (BOI16_bosses) | C++17 | 916 ms | 1328 KiB |
/*
Ben Watson
Quang Minh MasterDDDDD
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const string name = "sharks";
void solve();
signed main()
{
if (fopen((name + ".inp").c_str(), "r"))
{
freopen((name + ".inp").c_str(), "r", stdin);
freopen((name + ".out").c_str(), "w", stdout);
}
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
return 0;
}
// main program
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int maxn = 5001;
vector<int> leaders[maxn], childs[maxn], adj[maxn];
int n;
int vis[maxn];
ll val[maxn];
void DFS(int u)
{
ll sum = 0;
for (int v : adj[u])
{
DFS(v);
sum += val[v];
}
val[u] = sum + 1;
}
ll compute(int root)
{
for (int i = 1; i <= n; i++)
childs[i].clear();
for (int i = 1; i <= n; i++)
{
vis[i] = 0;
val[i] = 0;
if (i == root)
continue;
for (int x : leaders[i])
childs[x].push_back(i);
}
for (int i = 1; i <= n; i++)
adj[i].clear();
queue<int> q;
q.push(root);
vis[root] = 1;
while (!q.empty())
{
int u = q.front();
q.pop();
for (int v : childs[u])
{
if (vis[v] == 1)
continue;
vis[v] = 1;
adj[u].push_back(v);
q.push(v);
}
}
DFS(root);
ll res = 0;
for (int i = 1; i <= n; i++)
if (vis[i] == 0)
return oo;
else
res += val[i];
return res;
}
void solve()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
int k; cin >> k;
for (int j = 0; j < k; j++)
{
int x; cin >> x;
leaders[i].push_back(x);
}
}
ll res = oo;
for (int i = 1; i <= n; i++)
res = min(res, compute(i));
cout << res << '\n';
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |