제출 #349306

#제출 시각아이디문제언어결과실행 시간메모리
349306sinamhdvBosses (BOI16_bosses)C++11
100 / 100
763 ms876 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int mod = 1000 * 1000 * 1000 + 7; const int INF = 1000 * 1000 * 1000; const ll LINF = (ll)INF * INF; #ifdef DEBUG #define dbg(x) cout << #x << " = " << (x) << endl << flush; #define dbgr(s, f) { cout << #s << ": "; for (auto _ = (s); _ != (f); _++) cout << *_ << ' '; cout << endl << flush; } #else #define dbg(x) ; #define dbgr(s, f) ; #endif #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define fast_io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define msub(a, b) ((mod + ((ll)(a) - (b)) % mod) % mod) #define mdiv(a, b) ((ll)(a) * poww((b), mod - 2) % mod) #define all(x) (x).begin(), (x).end() #define pb push_back #define mp make_pair #define fr first #define sc second #define endl '\n' #define MAXN 5050 vector<int> cld[MAXN]; int h[MAXN]; ll ans = LINF; int n; bool mark[MAXN]; void bfs(int r) { memset(mark, 0, sizeof(mark)); fill(h, h + n + 5, INF); h[r] = 0; queue<int> q; q.push(r); mark[r] = true; while (!q.empty()) { int v = q.front(); q.pop(); for (int u : cld[v]) { if (mark[u]) continue; h[u] = h[v] + 1; mark[u] = true; q.push(u); } } } int32_t main(void) { fast_io; cin >> n; FOR(i, 1, n + 1) { int k; cin >> k; FOR(j, 0, k) { int x; cin >> x; cld[x].pb(i); } } FOR(i, 1, n + 1) { bfs(i); ll sm = 0; bool ok = true; FOR(i, 1, n + 1) { sm += h[i]; if (h[i] >= INF) ok = false; } dbg(i); dbgr(h + 1, h + n + 1); if (ok) ans = min(ans, sm); } cout << ans + n << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...