Submission #1123238

#TimeUsernameProblemLanguageResultExecution timeMemory
1123238Rainmaker2627Bosses (BOI16_bosses)C++20
100 / 100
639 ms780 KiB
#include<bits/stdc++.h>
using namespace std;

int n;
const int inf=1e9;
vector<int> sal;
vector<vector<int>> adj;

int bfs(int s) {
	sal.assign(n+1, 0);
	stack<pair<int, int>> t;
	queue<pair<int, int>> q;
	q.push({s, 0}); sal[s]=1;
	while (!q.empty()) {
		auto [u, p] = q.front();
		t.push({u, p});
		q.pop();

		for (auto v : adj[u]) {
			if (sal[v]) continue;
			sal[v]=1;
			q.push({v, u});
		}
	}

	while (!t.empty()) {
		auto [u, p] = t.top();
		sal[p]+=sal[u];
		t.pop();
	}

	int m=0;
	for (int i = 1; i <= n; ++i) {
		m+=sal[i];
		if (sal[i]==0) return inf;
	} return m;
}

int main() {
	cin.tie(0)->sync_with_stdio(false);

	cin >> n;
	adj.assign(n+1, vector<int>());
	for (int i = 1; i <= n; ++i) {
		int k, v;
		cin >> k;
		for (int j = 0; j < k; ++j) {
			cin >> v;
			adj[v].push_back(i);
		}
	}

	int m=inf;
	for (int i = 1; i <= n; ++i) {
		m=min(m, bfs(i));
	} cout << m << '\n';

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...