제출 #1129769

#제출 시각아이디문제언어결과실행 시간메모리
1129769NonozeBosses (BOI16_bosses)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)x.size()
#define fi first
#define se second
#define cmin(a, b) a=min(a, b)
#define cmax(a, b) a=max(a, b)

void solve();

signed main() {
	ios::sync_with_stdio(0); cin.tie(0);
	solve();
	return 0;
}


int n;
vector<vector<int>> adjbase, adj;

pair<int, int> dfs(int x) {
	int ans=0, sm=1;
	for (auto v: adj[x]) {
		auto [ansi, smi] = dfs(v);
		ans+=ansi, sm+=smi;
	}
	ans+=sm;
	return {ans, sm};
}

void solve() {
	cin >> n;
	adjbase.resize(n), adj.resize(n);
	vector<int> cnt(n);
	for (int i=0; i<n; i++) {
		int k; cin >> k;
		for (int j=0; j<k; j++) {
			int x; cin >> x; x--;
			adjbase[x].pb(i);
		}
	}
	int ans=n*n;
	for (int t=0; t<n; t++) {
		queue<int> q; q.push(t);
		vector<int> dist(n, n*n); dist[t]=0;
		vector<bool> visited(n, 0);
		adj.clear(), adj.resize(n);
		while (!q.empty()) {
			int u=q.front(); q.pop();
			if (visited[u]) continue;
			visited[u]=1;
			for (auto v: adjbase[u]) {
				if (dist[v]<=dist[u]+1) continue;
				dist[v]=dist[u]+1;
				q.push(v);
				adj[u].pb(v);
			}
		}
		cmin(ans, dfs(t).fi);
	}
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...