[BOJ] 11378 열혈강호 4 - P3

TaeGN·2024년 9월 11일

BOJ Platinum Challenge

목록 보기
71/114

문제풀이

  1. 이분 매칭을 한번 수행한 다음에, 최대 K번의 매칭을 더 수행한다.

주의사항

  1. 시간 절약을 위해 매칭이 성공한 경우에만 다시 매칭을 시도한다.

소요시간

5분


package 백준.Platinum.P3.p11378_열혈강호4

const val EMPTY = -1
fun main() {
    val (N, M, K) = readln().split(" ").map(String::toInt)
    val matrix = Array(N) { readln().split(" ").map(String::toInt) }
    val idArr = IntArray(M + 1) { EMPTY }
    val visited = BooleanArray(M + 1)
    fun dfs(id: Int): Boolean {
        for (i in 1 until matrix[id].size) {
            val job = matrix[id][i]
            if (visited[job]) continue
            visited[job] = true
            if (idArr[job] == EMPTY || dfs(idArr[job])) {
                idArr[job] = id
                return true
            }
        }
        return false
    }

    val queue = ArrayDeque<Int>()
    var count = 0
    for (i in 0 until N) {
        if (dfs(i)) {
            count++
            queue.add(i)
        }
        visited.fill(false)
    }
    var k = 0
    while (queue.isNotEmpty() && k < K) {
        val i = queue.removeFirst()
        if (dfs(i)) {
            k++
            queue.add(i)
        }
        visited.fill(false)
    }
    println(count + k)
}

https://github.com/TaeGN/Algorithm/blob/master/src/%EB%B0%B1%EC%A4%80/Platinum/P3/p11378_%EC%97%B4%ED%98%88%EA%B0%95%ED%98%B84/p11378_%EC%97%B4%ED%98%88%EA%B0%95%ED%98%B84.kt


문제링크

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

0개의 댓글