제출 #1092034

#제출 시각아이디문제언어결과실행 시간메모리
1092034Hacv16Bosses (BOI16_bosses)C++14
67 / 100
1591 ms1112 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,tune=native") const int MAX = 5e3 + 10; const int INF = 0x3f3f3f3f; int n; vector<int> adj[MAX]; inline int get(void) { char c = getchar(); while (c < '0' || c > '9') c = getchar(); int ret = 0; while (c >= '0' && c <= '9') ret = ret * 10 + (c - '0'), c = getchar(); return ret; } inline int testRoot(int root) { vector<bool> seen(n + 1); vector<int> salary(n + 1), processed; vector<vector<int>> children(n + 1); queue<int> q; q.push(root); seen[root] = true; while(q.size()) { int u = q.front(); q.pop(); processed.push_back(u); for(auto v : adj[u]) { if(seen[v]) continue; seen[v] = true; children[u].push_back(v); q.push(v); } } for(int i = 1; i <= n; i++) if(!seen[i]) return INF; int totalCost = 0; reverse(processed.begin(), processed.end()); for(auto curNode : processed) { int sum = 0; for(auto v : children[curNode]) sum += salary[v]; salary[curNode] = sum + 1; totalCost += salary[curNode]; } return totalCost; } int32_t main(void) { n = get(); for(int i = 1; i <= n; i++) { int k = get(); while(k--) { int u = get(); adj[u].push_back(i); } } int ans = INF; for(int i = 1; i <= n; i++) ans = min(ans, testRoot(i)); cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...