제출 #235345

#제출 시각아이디문제언어결과실행 시간메모리
235345rulerBosses (BOI16_bosses)C++14
100 / 100
708 ms744 KiB
// IOI 2021
#include <bits/stdc++.h>
using namespace std;

#define endl '\n'
#define ends ' '
#define die(x) return cout << x << endl, 0
#define all(v) v.begin(), v.end()
#define sz(x) (int)(x.size())
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) { cerr << ends << H; debug_out(T...); }
#define debug(...) cerr << "{" << #__VA_ARGS__ << "}:", debug_out(__VA_ARGS__)
typedef long long ll;
typedef pair<int, int> pii;
const int INF = 1e9;
const ll MOD = 1e9 + 7;
 
////////////////////////////////////////////////////////////////////

const int N = 5e3 + 5;

int n, sum, cnt, D[N];
vector<int> G[N];
queue<int> Q;

int BFS(int r) {
	memset(D, 63, sizeof D); D[r] = 1, Q.push(r), sum = cnt = 0;
	while (!Q.empty()) {
		int v = Q.front(); Q.pop();
		sum += D[v], cnt++;
		for (int u : G[v]) if (D[v] + 1 < D[u]) D[u] = D[v] + 1, Q.push(u);
	}
	if (cnt == n) return sum;
	else return INF;
}

int main() {

	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	mt19937 Rnd(time(0));

	cin >> n;
	for (int i = 1; i <= n; i++) {
		int k; cin >> k;
		while (k--) {
			int p; cin >> p;
			G[p].push_back(i);
		}
	}
	int ans = INF;
	for (int i = 1; i <= n; i++) ans = min(ans, BFS(i));
	cout << ans << endl;

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