알고리즘/알고리즘 이론, 템플릿

이분매칭

b1ackhand 2023. 6. 2. 18:51
int visited[202];
int A[102];
int B[102];
vector<int> arr[102];

bool dfs(int a)
{
	visited[a] = true;
	for (int b : arr[a]) 
	{
		if (B[b] == -1 || !visited[B[b]] && dfs(B[b])) 
		{
			A[a] = b;
			B[b] = a;
			return true;
		}
	}
	return false;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	memset(A, -1, sizeof(A));
	memset(B, -1, sizeof(B));
    
    int cnt = 0; 
	for (int i = 1; i <= N; i++) 
	{
		if (A[i] != -1)
			continue;

		memset(visited, 0, sizeof(visited));
		if (dfs(i)) 
			cnt++;
	}
		
}

'알고리즘 > 알고리즘 이론, 템플릿' 카테고리의 다른 글

인접행렬 분할거듭제곱  (0) 2023.06.08
스프라그 그런디  (0) 2023.06.05
MST - Kruskal  (0) 2023.04.03
O(nlogn) LIS  (0) 2023.03.28
c++ 문자열 slicing 및 파싱  (0) 2023.03.14