티스토리 뷰

반응형

✏️문제 링크

https://www.acmicpc.net/problem/14433

 

14433번: 한조 대기 중

첫째 줄에 한 팀에 속한 플레이어의 수 N(1 ≤ N ≤ 300)과 트롤픽의 수 M(1 ≤ M ≤ 300), 각 팀의 팀원들이 원하는 트롤픽의 수 K1, K2(1 ≤ K1, K2 ≤ 500)가 주어진다. 다음 K1개의 줄에 걸쳐 두 수 i, j(1 ≤

www.acmicpc.net

 

 

✏️문제 설명

 

 

✏️문제 풀이

두 팀이므로 각 팀마다 이분 매칭을 구현해주면 됩니다.

https://pooreumjung.tistory.com/338

 

Algorithm 공부 #26 - 이분 매칭(Binary Matching)

Algorithm 공부 #26 - 이분 매칭 ✏️이분 매칭이란? 이분 그래프에서 주로 사용하는 알고리즘 이분 그래프는 두 개의 정점 그룹이 존재할 때 모든 간선의 용량이 1이면서 양쪽 정점이 서로 다른 그

pooreumjung.tistory.com

 

✏️문제 코드

#include<iostream>
#include<vector>
using namespace std;
#define MAX 301

vector<int>graph[MAX];
vector<int>graph2[MAX];
int pick[MAX];
int pick2[MAX];
bool visit[MAX];
bool visit2[MAX];
bool dfs(int per);
bool dfs2(int per);
int N, M, K1, K2;
int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> N >> M >> K1 >> K2;

	for (int i = 1; i <= K1; i++) {
		int a, b;
		cin >> a >> b;
		graph[a].push_back(b);
	}
	for (int i = 1; i <= K2; i++) {
		int a, b;
		cin >> a >> b;
		graph2[a].push_back(b);
	}

	int count = 0, count2 = 0;
	for (int i = 1; i <= N; i++) {
		fill(visit, visit + MAX, false);
		if (dfs(i))
			count++;
	}
	for (int i = 1; i <= N; i++) {
		fill(visit2, visit2 + MAX, false);
		if (dfs2(i))
			count2++;
	}
	if (count >= count2)
		cout << "그만 알아보자";
	else
		cout << "네 다음 힐딱이";
}

bool dfs(int per)
{
	for (int i = 0; i < graph[per].size(); i++) {
		int end = graph[per][i];
		if (visit[end])
			continue;
		visit[end] = true;
		if (pick[end] == 0 || dfs(pick[end])) {
			pick[end] = per;
			return true;
		}
	}
	return false;
}
bool dfs2(int per)
{
	for (int i = 0; i < graph2[per].size(); i++) {
		int end = graph2[per][i];
		if (visit2[end])
			continue;
		visit2[end] = true;
		if (pick2[end] == 0 || dfs2(pick2[end])) {
			pick2[end] = per;
			return true;
		}
	}
	return false;
}

 

 

✏️ ps..

기본적인 이분 매칭 구현은 이제 손에 익은 것 같네요. 5문제 정도 푸니까 손이 외운 것 같아요.

다음부터는 좀 더 난이도 높은 이분 매칭 문제로 돌아와보겠습니다.!!

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함