제출 #98868

#제출 시각아이디문제언어결과실행 시간메모리
98868robot_dreamsBosses (BOI16_bosses)C++17
67 / 100
1549 ms1204 KiB
#include <bits/stdc++.h> #define F first #define S second #define forn(i, n) for (int i = 0; i < int(n); i++) using namespace std; using ll = long long; using pll = pair<ll, ll>; bool all(vector<bool>& bs) { for (bool b : bs) if (!b) return false; return true; } pll dfs(vector<vector<int>>& tree, int v) { ll child_sum = 0, subtree_sum = 0; for (int w : tree[v]) { pll p = dfs(tree, w); child_sum += p.F; subtree_sum += p.S; } ll salary = child_sum + 1; return {salary, subtree_sum + salary}; } int main() { ios_base::sync_with_stdio(false); cout << setprecision(12); cin.tie(nullptr); int n; cin >> n; vector<vector<int>> adj(n); forn(v, n) { int k; cin >> k; forn(i, k) { int u; cin >> u; u--; adj[u].push_back(v); } } ll ans = LLONG_MAX; forn(root, n) { queue<int> q; vector<bool> visited(n); vector<vector<int>> tree(n); q.push(root); visited[root] = true; while (!q.empty()) { int v = q.front(); q.pop(); for (int w : adj[v]) { if (visited[w]) continue; tree[v].push_back(w); q.push(w); visited[w] = true; } } if (all(visited)) ans = min(ans, dfs(tree, root).S); } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...