No Rules Rules

열혈강호 (feat. 백준, 11375번) 본문

생활/코테

열혈강호 (feat. 백준, 11375번)

개발하는 완두콩 2022. 9. 22. 12:56
728x90
반응형

열혈강호
https://www.acmicpc.net/problem/11375

 

11375번: 열혈강호

강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 한 개의 일만 할 수 있고, 각각

www.acmicpc.net

 

반응형

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string.h>
using namespace std;
int N, M, ans, task[1001];    // 인덱스는 일, 값은 담당 직원 번호
bool arr[1001][1001], visit[1001];
bool dfs(register int n){
    for(register int m = 1; m <= M; ++m){
        if(!arr[n][m] || visit[m])
            continue;
        visit[m] = true;
        if(!task[m] || dfs(task[m])){
            task[m] = n;
            return true;
        }
    }
    return false;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    memset(task, 0, sizeof(task));
    memset(arr, false, sizeof(arr));
    cin >> N >> M;
    for(register int n = 1, c; n <= N; ++n){
        cin >> c;
        for(register int i = 1, m; i <= c; ++i)
            cin >> m, arr[n][m] = true;
    }
    ans = 0;
    for(register int n = 1; n <= N; ++n){
        memset(visit, false, sizeof(visit));
        if(dfs(n))
            ++ans;
    }
    cout << ans;
    return 0;
}
// *&)*@*

 

  1. 1번 직원이 a와 b의 일 모두를 할 수 있다고 가정해보겠습니다. a가 순서가 앞순서이니 1번 직원은 a 일을 담당합니다.
  2. 2번 직원이 a 일을 할 수 있다고 가정해보겠습니다. 1번 직원이 b 일을 담당해준다면 2번 직원이 a 일을 담당할 수 있으므로 효율적일껍니다. 왜냐하면 한명의 직원은 하나의 일만 가져가야 하니까요.
  3. 따라서 2번 직원은 a 일을 담당하는 직원에게 'a 일은 내가 할테니까 당신은 다른 일을 하세요.' 라고  백트래킹을 통해 알려줍니다. (13번째줄의 dfs 재귀호출 및 visit의 초기화를 눈여겨보세요.)
728x90
반응형

'생활 > 코테' 카테고리의 다른 글

돌멩이 제거 (feat. 백준, 1867번)  (2) 2022.09.22
열혈강호 2 (feat. 백준, 11376번)  (0) 2022.09.22
인구 이동 (feat. 백준, 16234번)  (2) 2022.09.21
뱀 (feat. 백준, 3190번)  (0) 2022.09.21
에디터 (feat. 백준, 1406번)  (0) 2022.09.20
Comments