본문 바로가기

Algorithm/BOJ

[BOJ 1867] 돌멩이 제거

이분 매칭 문제

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

 

 


[문제 풀이]

 

https://kangwlgns.tistory.com/128

 


[소스 코드] / C++

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int N;
vector<int> adj[501];
int B[501];
bool visited[501];

void BtR() {
    for (int i = 0; i < 501; i++) {
        B[i] = -1;
    }
}

void setVisited() {
    for (int i = 1; i < N + 1; i++) {
        visited[i] = false;
    }
}

bool dfs(int cur) {
    visited[cur] = true;

    for (int next : adj[cur]) {
        if (B[next] == -1 || !visited[B[next]] && dfs(B[next])) {
            B[next] = cur;
            return true;
        }
    }

    return false;
}

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    BtR();
    
    int K; cin >> N >> K;
    while (K--) {
        int u, v; cin >> u >> v;
        adj[u].push_back(v);
    }

    int ans = 0;
    for (int i = 1; i < N + 1; i++) {
        setVisited();
        if (dfs(i)) ++ans;
    }

    cout << ans;
    
    return 0;
}

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ 28703] Double It  (0) 2023.08.15
[BOJ 28218] 격자 게임  (0) 2023.08.14
[BOJ 3295] 단방향 링크 네트워크  (0) 2023.02.22
[BOJ 16570] 앞뒤가 맞는 수열  (0) 2023.02.12
[BOJ 1106] 호텔  (1) 2023.01.18