DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

일반 그래프 최대 매칭 복원

문제로 돌아가기

해설

이분 그래프가 아닌 일반 그래프에서는 홀수 사이클 때문에 단순한 이분 매칭 알고리즘을 사용할 수 없다. Edmonds의 blossom 알고리즘을 사용한다.

현재 매칭에 대한 증가 경로를 BFS로 찾는다. 탐색 도중 같은 BFS 트리에 속한 두 정점 사이의 간선을 만나 홀수 사이클이 만들어지면, 그 사이클 전체를 하나의 blossom으로 축약한다. 축약된 그래프에서 증가 경로를 계속 찾을 수 있으며, 증가 경로가 발견되면 부모 배열을 따라가며 매칭 여부를 뒤집는다.

구현에서는 각 정점이 현재 속한 blossom의 대표를 나타내는 basebasebase 배열, BFS 부모를 나타내는 ppp 배열, 현재 매칭 상대를 나타내는 matchmatchmatch 배열을 관리한다. 두 정점이 만드는 blossom의 최소 공통 조상은 매칭 간선과 BFS 부모 간선을 번갈아 따라가며 찾는다. blossom을 축약할 때는 사이클 위의 모든 대표를 최소 공통 조상으로 바꾸고, 새로 탐색 가능해진 정점을 BFS 큐에 넣는다.

증가 경로 하나를 찾을 때 O(N2)O(N^2)O(N2) 시간이 들고, 매칭 크기는 최대 ⌊N/2⌋\lfloor N/2 \rfloor⌊N/2⌋번 증가하므로 전체 시간 복잡도는 O(N3+M)O(N^3+M)O(N3+M)이다. 메모리 복잡도는 O(N+M)O(N+M)O(N+M)이다.

출력할 때는 match[v]match[v]match[v]가 존재하고 v<match[v]v<match[v]v<match[v]인 정점만 한 번씩 출력하면 된다.

Solution written by GPT5.6