Submission #79534

#TimeUsernameProblemLanguageResultExecution timeMemory
79534DrumpfTheGodEmperorBosses (BOI16_bosses)C++14
100 / 100
655 ms944 KiB
#include <bits/stdc++.h> #define MOD 1000000007 #define INF 1061109567 #define INFLL 4557430888798830399 #define bp __builtin_popcountll #define pb push_back #define in(s) freopen(s,"r",stdin); #define out(s) freopen(s,"w",stdout); #define fi first #define se second #define bw(i,r,l) for (int i=r-1;i>=l;i--) #define fw(i,l,r) for (int i=l;i<r;i++) #define fa(i,x) for (auto i:x) using namespace std; const int N = 5005; int n, sz[N], hei[N]; vector<int> g[N]; bool used[N]; signed main() { #ifdef BLU in("blu.inp"); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; fw (i, 0, n) { int k; cin >> k; while (k--) { int x; cin >> x; x--; g[x].pb(i); } } /* Salary of person u is equal to the number of nodes inside the subtree Fix root as r. At each step just BFS into all possible choices. */ int res = INF; fw (r, 0, n) { queue<int> q; q.push(r); int lft = n; memset(used, 0, sizeof used); used[r] = 1; hei[r] = 0; while (!q.empty()) { lft--; int u = q.front(); q.pop(); fa (v, g[u]) if (!used[v]) { used[v] = 1; q.push(v); hei[v] = hei[u] + 1; } } int ans = n; if (!lft) { fw (i, 0, n) ans += hei[i]; res = min(res, ans); } } cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...