2021. 1. 10. 10:08ใ๐จ๐ป๐ซ ํ๋ก๊ทธ๋๋ฐ/BOJ(๋ฐฑ์ค)
๋ฌธ์ ๋งํฌ : [๋ฐฑ์ค] 11377๋ฒ: ์ดํ๊ฐํธ 3
1. ๋ฌธ์
๊ฐํธ๋ค ํ์ฌ์๋ ์ง์์ด N๋ช ์ด ์๊ณ , ํด์ผํ ์ผ์ด M๊ฐ๊ฐ ์๋ค. ์ง์์ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , ์ผ์ 1๋ฒ๋ถํฐ M๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค.
๊ฐ ์ง์์ ํ ๊ฐ์ ์ผ๋ง ํ ์ ์๊ณ , ๊ฐ๊ฐ์ ์ผ์ ๋ด๋นํ๋ ์ฌ๋์ 1๋ช ์ด์ด์ผ ํ๋ค. ๋จ, N๋ช ์ค์์ K๋ช ์ ์ผ์ ์ต๋ 2๊ฐํ ์ ์๋ค.
๊ฐ๊ฐ์ ์ง์์ด ํ ์ ์๋ ์ผ์ ๋ชฉ๋ก์ด ์ฃผ์ด์ก์ ๋, M๊ฐ์ ์ผ ์ค์์ ์ต๋ ๋ช ๊ฐ๋ฅผ ํ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
2. ์ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์์ ์ N๊ณผ ์ผ์ ๊ฐ์ M, ์ผ์ 2๊ฐํ ์ ์๋ ์ง์์ ์ K๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 1,000, 1 ≤ K ≤ N)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ i๋ฒ์งธ ์ค์๋ i๋ฒ ์ง์์ด ํ ์ ์๋ ์ผ์ ๊ฐ์์ ํ ์ ์๋ ์ผ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
์ฒซ์งธ ์ค์ ๊ฐํธ๋ค ํ์ฌ์์ ํ ์ ์๋ ์ผ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
3. ๋ฌธ์ ํ์ด ๋ฐ ์ฝ๋
์ง์ , ํด์ผํ ์ผ ์ด ๋๊ฐ์ง ์ง๋จ๊ฐ์ ์ต๋ ๋งค์นญ์ ์ฐพ์์ผํ๋ ๋ฌธ์ ์์ต๋๋ค. ์ง์ ์ง๋จ๊ณผ ํด์ผํ ์ผ ์ง๋จ์ ๊ทธ ๊ฐ๊ฐ์ ์ง๋จ ์์ ๋ผ๋ฆฌ๋ ๊ฐ์ ์ด ์๊ณ ์ง์ ์ง๋จ๊ณผ ์ผ ์ง๋จ ์ฌ์ด์๋ง ๊ฐ์ ์ด ์กด์ฌํ๋ฏ๋ก ์ด๋ถ ๊ทธ๋ํ๋ก ์ฌ๊ธธ ์ ์์ต๋๋ค. ์ด๋ถ ๊ทธ๋ํ์์ ๊ฐ์ ์ ์ฉ๋์ด ๋ชจ๋ 1์ธ ์ต๋ ๋งค์นญ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ์ด๋ถ ๋งค์นญ์ DFS๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ์ต๋๋ค.
#include<bits/stdc++.h>
using namespace std;
const int MAX = 1000 + 1;
int workers[MAX],tasks[MAX],N,M,K;
bool visited[MAX];
vector<vector<int>> canDo;
bool dfs(int a){
if(visited[a]) return false;
visited[a] = true;
for(int i=0;i<(int)canDo[a].size();i++) {// worker a๊ฐ ํ ์ ์๋ ์ผ ํ์.
int b = canDo[a][i];
if(!tasks[b]||dfs(tasks[b])) {
tasks[b] = a;
workers[a] = b;
return true;
}
}
return false;
}
int biMatching(){
int ans = 0;
for(int i=1;i<=N;i++){ // ์ต๋ ๋งค์นญ ํ ๋ฒ ์งํ.
memset(visited,0,sizeof(visited));
if(dfs(i)) ans++;
}
for(int i=1;i<=N;i++){ // ๋งค์นญ์ด ๋๋๊ณ ์ผ์ 2๋ฒ ํ ์์๋ K๋ช
์ ์ง์๊ณผ ์ผ์ ๋งค์นญ.
memset(visited,0,sizeof(visited));
if(dfs(i)){
ans++;
K--;
if(!K) break;
}
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M>>K;
canDo.resize(N+1);
for(int i=1;i<=N;i++) {
int cnt;
cin>>cnt;
while(cnt--){
int taskNum;
cin>>taskNum;
canDo[i].push_back(taskNum); // i๋ฒ์งธ ์ง์์ด ํ ์ ์๋์ผ ์ ์ฅ.
}
}
cout<<biMatching()<<"\n";
return 0;
}
4. ๋ง๋ฌด๋ฆฌ
์ด๋ถ ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์๋ ์ถํ ํฌ์คํ ์ผ๋ก ๋จ๊ธฐ๊ฒ ์ต๋๋ค! ๋ถ์กฑํ ๋ถ๋ถ ์ง์ ์ธ์ ๋ ๋๊ธ๋ก ๋ถํ๋๋ฆฝ๋๋ค^^.
'๐จ๐ปโ๐ซ ํ๋ก๊ทธ๋๋ฐ > BOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 13306๋ฒ: ํธ๋ฆฌ (0) | 2021.01.12 |
---|---|
[๋ฐฑ์ค] 9576๋ฒ: ์ฑ ๋๋ ์ฃผ๊ธฐ (0) | 2020.12.28 |
[๋ฐฑ์ค] 2470 ๋ฒ: ๋ ์ฉ์ก (0) | 2020.12.26 |
[๋ฐฑ์ค] 1644๋ฒ: ์์์ ์ฐ์ํฉ (0) | 2020.12.25 |
[๋ฐฑ์ค] 1054๋ฒ: ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (0) | 2020.12.21 |