제출 #1200146

#제출 시각아이디문제언어결과실행 시간메모리
1200146hackstar9월 (APIO24_september)C++17
45 / 100
119 ms8576 KiB
#include "september.h"

#include <bits/stdc++.h>

using namespace std;

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	vector<vector<int>>g(N);
	for(int i=0;i<F.size();i++){
		if(~F[i]){
			g[F[i]].emplace_back(i);
		}
	}
	vector<set<int>>st(M);
	vector<vector<int>>vis(M,vector<int>(N,0));
	auto dfs=[&](auto dfs,int id,int u)->void{
		vis[id][u]=1;
		for(auto v:g[u]){
			if(vis[id][v]){
				continue;
			}
			st[id].insert(v);
			dfs(dfs,id,v);
		}
	};
	int ans=0;
	for(int i=0;i<N-1;i++){
		int cur=S[0][i];
		if(st[0].count(cur)){
			st[0].erase(cur);
		}
		else{
			dfs(dfs,0,cur);
		}
		ans+=(st[0].empty());
	}
	//cout<<ans<<'\n';
	for(int j=1;j<M;j++){
		int cur=0;
		for(int i=0;i<N-1;i++){
			int cur=S[j][i];
			if(st[j].count(cur)){
				st[j].erase(cur);
			}
			else{
				dfs(dfs,j,cur);
			}
			cur+=(st[j].empty());
		}
		ans=min(ans,cur);
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...