제출 #977082

#제출 시각아이디문제언어결과실행 시간메모리
977082VMaksimoski008Bosses (BOI16_bosses)C++17
100 / 100
888 ms1088 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxn = 5005; int n, k, x, seen=0; ll ans = 1e18, dp[maxn+5]; vector<int> graph[maxn+5], tree[maxn+5], vis(maxn+5); queue<int> q; ll dfs(int u) { dp[u] = 1; for(int &v : tree[u]) dp[u] += dfs(v); return dp[u]; } int32_t main() { cin >> n; for(int i=1; i<=n; i++) { cin >> k; for(int j=0; j<k; j++) { cin >> x; graph[x].push_back(i); } } for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) vis[j] = dp[j] = 0, tree[j].clear(); q.push(i); vis[i] = 1; seen = 0; while(!q.empty()) { int u = q.front(); q.pop(); seen++; for(int &v : graph[u]) { if(vis[v]) continue; vis[v] = 1; tree[u].push_back(v); q.push(v); } } if(seen < n) continue; dfs(i); ll res = 0; for(int j=1; j<=n; j++) res += dp[j]; ans = min(ans, res); } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...