Submission #287840

#TimeUsernameProblemLanguageResultExecution timeMemory
287840nandonathanielBosses (BOI16_bosses)C++14
100 / 100
1478 ms1052 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=5005;
vector<int> adj[MAXN],edge[MAXN];
int res;
bool visited[MAXN];

int dfs(int now){
	int ret=0;
	for(auto nxt : edge[now])ret+=dfs(nxt);
	res+=(ret+1);
	return ret+1;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	int n,k,a;
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> k;
		for(int j=1;j<=k;j++){
			cin >> a;
			adj[a].push_back(i);
		}
	}
	int ans=1e9;
	for(int i=1;i<=n;i++){
		memset(visited,0,sizeof(visited));
		for(int i=1;i<=n;i++)edge[i].clear();
		queue<int> Q;
		Q.push(i);
		visited[i]=true;
		while(!Q.empty()){
			int now=Q.front();
			Q.pop();
			for(auto nxt : adj[now]){
				if(!visited[nxt]){
					edge[now].push_back(nxt);
					visited[nxt]=true;
					Q.push(nxt);
				}
			}
		}
		bool cek=true;
		for(int j=1;j<=n;j++){
			if(!visited[j]){
				cek=false;
				break;
			}
		}
		if(!cek)continue;
		res=0;
		dfs(i);
		ans=min(ans,res);
	}
	cout << ans << '\n';
	return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...