제출 #503688

#제출 시각아이디문제언어결과실행 시간메모리
503688banterbryBosses (BOI16_bosses)C++17
67 / 100
1529 ms1096 KiB
// Factos 👍👀 #undef _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long #define pb push_back #define fi first #define si second #define ar array typedef pair<int,int> pi; typedef tuple<int,int,int> ti; void debug_out() { cerr << endl; } template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {cerr << " " << to_string(H);debug_out(T...);} #define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__) int N, ans = (1<<30); vector<int> adj[5010], go[5010]; vector<int> vis, order, dp; queue<int> q; void dfs(int x) { for (auto i: go[x]) { dfs(i); } order.pb(x); } int32_t main() { fast; cin >> N; for (int i = 1; i <= N; ++i) { int k; cin >> k; for (int j = 0; j < k; ++j) { int x; cin >> x; adj[x].pb(i); } } for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) go[j].clear(); vis.assign(N + 1, 0); order.clear(); q.push(i); vis[i] = 1; while (q.size()) { int x = q.front(); q.pop(); for (auto v: adj[x]) { if (vis[v]) continue; vis[v] = 1; go[x].pb(v); q.push(v); } } bool skip = false; for (int j = 1; j <= N; ++j) { if (!vis[j]) skip = true; } if (skip) continue; dfs(i); dp.assign(N + 1, 0); for (auto i: order) { int sum = 0; for (auto j: go[i]) sum += dp[j]; dp[i] = sum + 1; } int cur = 0; for (auto i: order) { cur += dp[i]; } ans = min(ans, cur); // debug(cur); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...