제출 #723479

#제출 시각아이디문제언어결과실행 시간메모리
723479baneBosses (BOI16_bosses)C++17
100 / 100
1283 ms1008 KiB
#include<bits/stdc++.h>
   
using namespace std;
   
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif



int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    vector<int>g[n];
    for (int i = 0 ; i < n; i++){
		int k;
		cin >> k;
		while(k--){
			int x;
			cin >> x;
			--x;
			g[x].emplace_back(i);
		}
	}
	int visited[n];
	vector<int>adj[n];
	int ans = (int)1e9;
	for (int i = 0; i < n; i++){
		queue<int>q;
		q.push(i);
		for (int j = 0; j < n; j++){
			visited[j] = 0;
			adj[j].clear();
		}
		int cnt = 0;
		while(!q.empty()){
			int node = q.front();
			q.pop();
			++cnt;
			visited[node] = 1;
			for (auto p : g[node]){
				if(!visited[p]){
					visited[p] = 1;
					q.push(p);
					adj[node].emplace_back(p);
				}
			}
		}
		if (cnt < n)continue;
		function<pair<int,int>(int,int)>dfs = [&](int u, int p){
			int sum = 1;
			int tot = 0;
			for (int& x : adj[u]){
				if (x == p)continue;
				auto m = dfs(x,u);
				sum+=m.first;
				tot+=m.second;
			}
			tot+=sum;
			return make_pair(sum, tot);
		};
		ans = min(ans,dfs(i,-1).second);
	}
	cout<<ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...