제출 #1208621

#제출 시각아이디문제언어결과실행 시간메모리
1208621ml_tssBosses (BOI16_bosses)C++20
67 / 100
1593 ms1224 KiB
#include <bits/stdc++.h> using namespace std; int cost(const vector<int>& parent) { int n = parent.size(); vector<vector<int>> children(n); int root = -1; for (int i = 0; i < n; i++) { if (parent[i] == 0) { root = i; } else { children[parent[i] - 1].push_back(i); } } vector<int> prices(n); function<int(int)> dfs = [&](int u) -> int { int total = 0; for (int v : children[u]) { total += dfs(v); } prices[u] = total + 1; return prices[u]; }; dfs(root); int res = 0; for (int x : prices) res += x; return res; } int build_tree(int root, unordered_map<int, vector<int>>& constraint) { int n = constraint.size(); vector<int> tree(n, -1); queue<int> cur; tree[root - 1] = 0; cur.push(root); while (!cur.empty()) { int node = cur.front(); cur.pop(); for (int i : constraint[node]) { if (tree[i - 1] == -1) { tree[i - 1] = node; cur.push(i); } } } for (int val : tree) { if (val == -1) return INT_MAX; } return cost(tree); } int main() { ios::sync_with_stdio(false); cin.tie(0); int N; cin >> N; unordered_map<int, vector<int>> um; for (int i = 1; i <= N; i++) { um[i] = {}; } for (int i = 1; i <= N; i++) { int c; cin >> c; for (int j = 0; j < c; j++) { int t; cin >> t; um[t].push_back(i); } } int mini = INT_MAX; for (int i = 1; i <= N; i++) { int val = build_tree(i, um); if (val < mini) mini = val; } cout << mini; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...