티스토리 뷰
반응형
✏️문제 링크
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문제 정도 푸니까 손이 외운 것 같아요.
다음부터는 좀 더 난이도 높은 이분 매칭 문제로 돌아와보겠습니다.!!
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[C/C++] 백준 1786번 - 찾기 (2) | 2024.04.18 |
---|---|
[C/C++] 백준 1809번 -Moo (0) | 2024.04.17 |
[C/C++] 백준 1671번 - 상어의 저녁식사 (0) | 2024.04.15 |
[C/C++] 백준 1298번 - 노트북의 주인을 찾아서 (0) | 2024.04.15 |
[C/C++] 백준 2188번 - 축사 배정 (2) | 2024.04.14 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 투 포인터
- 알고리즘
- 자바스크립트
- C++ Stack
- c++ string
- CSS
- 이분 매칭
- 세그먼트 트리
- 유클리드 호제법
- 백준
- 유니온 파인드
- DFS
- 자바
- 우선순위 큐
- html
- DP
- 스프링 부트 crud 게시판 구현
- HTML5
- Do it!
- 스택
- 알고리즘 공부
- 백준 풀이
- java
- C++
- 자료구조
- BFS
- 반복문
- js
- 에라토스테네스의 체
- 카운팅 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함