Submission #1275702

#TimeUsernameProblemLanguageResultExecution timeMemory
1275702_broken_Bosses (BOI16_bosses)C++20
100 / 100
737 ms996 KiB
#include <bits/stdc++.h>
#define ll long long
#define int long long
#define fast_io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lc (id << 1)
#define rc ((id << 1) ^ 1)

using namespace std;

const long long mod = 1e9 + 7, maxn = 5e3 + 9, base = 1e6 + 7;

//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") 

int n,ans1 = 0;
vector<int> adj[maxn],adj2[maxn];

int dfs(int v)
{
	int val = 0;
	for(int u : adj2[v])
		val += dfs(u);
	val++;
	ans1 += val;
	return val;
}

int calc_ans(int v)
{
	for(int i = 0; i <= n;i++)
		adj2[i].clear();

	deque<int> q;
	q.push_front(v);
	bitset<5009> mark;
	mark[v] = true;
	int tt = 1;
	while (q.size())
	{
		int u = q.back();
		q.pop_back();
		for(int x : adj[u])
			if(!mark[x]){
				q.push_front(x);
				mark[x] = true;
				tt++;
				adj2[u].push_back(x);
			}
	}
	ans1 = 0;
	dfs(v);
	if(tt == n)
		return ans1;
	else
		return INT_MAX;
}

int32_t main()
{
	//fast_io;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		int ki;
		cin >> ki;
		for(int j = 1; j <= ki;j++)
		{
			int p;
			cin >> p;
			adj[p].push_back(i);
		}
	}
	int ans = INT_MAX;
	for(int i = 1;i <= n;i++)
	{
		ans = min(ans , calc_ans(i));
	}
	cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...