Submission #1185592

#TimeUsernameProblemLanguageResultExecution timeMemory
1185592GoBananas69Bosses (BOI16_bosses)C++20
22 / 100
1 ms328 KiB
#include <algorithm> #include <cstring> #include <iostream> #include <queue> #include <vector> using namespace std; const long long MOD = 1000000007; const int maxn = 505; const int Lg = 23; const long long inf = 1000000000; typedef long long ll; vector<ll> g[maxn], c[maxn]; bool use[maxn]; ll cu = 0; ll dfs(int v, int p = -1) { ll x = 0; for (int to : c[v]) { if (to == p) continue; x += dfs(to, v); } cu += x + 1; return x + 1; } void solve() { int n; cin >> n; pair<ll, ll> mb = {-inf, -inf}; for (int i = 1; i <= n; i++) { int k; cin >> k; for (int j = 0; j < k; j++) { int p; cin >> p; g[p].push_back(i); mb = max(mb, make_pair((ll)g[p].size(), (ll)p)); } } ll ans = inf; for (int i = 1; i <= n; i++) { if (g[i].empty()) continue; if (abs((int)g[i].size() - (int)mb.first) > 1) continue; for (int j = 1; j <= n; j++) c[j].clear(); queue<int> q; q.push(i); memset(use, 0, sizeof(use)); use[i] = true; int h = 1; while (!q.empty()) { int v = q.front(); q.pop(); for (auto to : g[v]) { if (use[to]) continue; c[v].push_back(to); q.push(to); use[to] = true; h++; } } if (h == n) { cu = 0; dfs(i); ans = min(ans, cu); } } cout << ans << "\n"; } int main() { cin.tie(0) -> sync_with_stdio(0); int tt = 1; while (tt--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...