일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Computer Science
- 백준
- 감상문
- Database
- algorithm
- 프로그래머스
- BOJ
- 운영체제
- algogritim
- D3
- SW Expert Academy
- 독서
- 네트워크
- 법의학
- network
- Programmers
- LeetCode
- data structure
- swea
- c++
- 문제풀이
- OS
- language
- 데이터베이스
- 알고리즘
- db
- 자료구조
- 재테크/투자
- D2
- cs
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 11375번 열혈강호 본문
문제
BOJ 11375 : https://www.acmicpc.net/problem/11375
11375번: 열혈강호
강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 한 개의 일만 할 수 있고, 각각
www.acmicpc.net
접근
이분 매칭(Bipartite Matching)을 이용하여 문제를 해결하였다.
코드
#include <iostream>
#include <vector>
using namespace std;
int n, m, ans = 0, visit[1010], matchNum[1010] = {0};
vector<int> graph[1010];
int dfs(int num) {
for (int i : graph[num]) {
if (!visit[i]) {
visit[i] = 1;
if (!matchNum[i] || dfs(matchNum[i])) {
matchNum[i] = num;
return 1;
}
}
}
return 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
int num, a;
cin >> num;
for (int j = 0; j < num; j++) {
cin >> a;
graph[i].push_back(a);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++)
visit[j] = 0;
ans += dfs(i);
}
cout << ans;
return 0;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 2671번 잠수함식별 (0) | 2021.07.24 |
---|---|
[BOJ 백준] 1867번 돌멩이 제거 (0) | 2021.07.23 |
[BOJ 백준] 14426번 접두사 찾기 (0) | 2021.07.16 |
[BOJ 백준] 1701번 Cubeditor (0) | 2021.07.15 |
[BOJ 백준] 6549번 히스토그램에서 가장 큰 직사각 (0) | 2021.07.14 |
Comments