Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다익스트라
- 구현
- QUICKSTARTGUIDE
- 이젠 골드구현도 어렵네..
- 백준코딩테스트
- COSPROJAVA1급
- PS
- dp
- 게더타운시작
- spring
- 01BFS
- 알고리즘
- 백준
- YBMCOS
- 취득후기
- 우선순위큐
- 다이나믹프로그래밍
- 완전탐색
- DFS
- 재귀함수
- 시뮬레이션
- deque
- 세그먼트트리
- 네트워크플로우
- 엘라스틱서치
- COSPRO
- java
- 자바PS
- GatherTown
- BFS
Archives
- Today
- Total
공부공간
BOJ - 1298 ) 노트북의 주인을 찾아서 본문
https://www.acmicpc.net/problem/1298
이분 매칭의경우 네트워크플로우에서 최대유량이 1인간선으로 이루어진 네트워크중 A/B집합 두개로
나뉘어서 최대유량을 구하는 문제이다.
하지만 에드몬드카프로 구현하기보다는 DFS를 활용하여, 앞선 매칭을 바꿀수있는지? 에대한 재귀함수를
정의한다.
이해가 안되면 아래 강의를 추천한다.
뭔가 이분매칭의경우, "두 집합간 최대한 매칭을 시킨다" 라는 느낌이 온다.
https://blog.naver.com/ndb796/221240613074
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
class Main {
public static int m,n,result[];
public static boolean check[];
public static ArrayList<Integer> node[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
node = new ArrayList[n+1];
result = new int[n+1];
for(int i = 1 ; i <= n ; i++){node[i] = new ArrayList<>();}
for(int i = 0 ; i < m ; i ++){
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
node[s].add(num);
}
int answer =0;
for(int i = 1 ; i <= n ; i++){
check = new boolean[n+1];
if(bipartiteMatching(i)){
answer++;
}
}
System.out.print(answer);
}
public static boolean bipartiteMatching(int x){
for(int i = 0 ; i < node[x].size() ; i++){
// 원하는 집
int want = node[x].get(i);
if(!check[want]){
// 방문안했다면 방문처리 해주어 중복방지
check[want] = true;
if(result[want]==0 || bipartiteMatching(result[want])){
result[want] = x;
return true;
}
}
}
return false;
}
}
'알고리즘 > 이분 매칭' 카테고리의 다른 글
BOJ - 11375 ) 열혈강호 (0) | 2020.09.01 |
---|---|
BOJ - 2188 ) 축사배정 (0) | 2020.08.31 |
Comments