题目链接:
题目大意:
- 一个NxN矩阵,有一些障碍在矩阵中;
- 消除障碍,一次可以消除一行或者一列;
- 问最小次数
解题思路:
#include<iostream>
#include<string.h>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
const int N = 507;
vector<vector<bool>>vec(N,vector<bool>(N, false));
bool visited[N];
int match[N];
int n, k;
bool dfs(int u)
{
for(int v=1; v<=n; ++ v)
{
if(vec[u][v] && visited[v] == false)
{
visited[v] = true;
if(match[v] == -1 || dfs(match[v]))
{
match[v] = u;
return true;
}
}
}
return false;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> k;
for(int i=0; i<k; ++i)
{
int r, c;
cin >> r >> c;
vec[r][c] = true;
}
memset(match, -1, sizeof(match));
int ans = 0;
for(int i=1; i<=n; ++ i)
{
memset(visited,false, sizeof(visited));
if(dfs(i))
ans ++;
}
cout << ans << endl;
return 0;
}