1、题目类型:图论、最大二分匹配、匈牙利算法。

2、解题思路:求解最小点集覆盖即求解最大二分匹配,匈牙利算法的简单应用。

3、注意事项:模拟匈牙利算法的递归过程。

4、实现方法:

#include<iostream>
using namespace std;
#define Max 510

int n,k,match[Max];
bool map[Max][Max],vis[Max];

bool DFS(int s)
{
int i;
for(i=1;i<=n;i++)
{
if(map[s][i] && !vis[i])
{
vis[i]
=1;
if(match[i]==0 || DFS(match[i]))
{
match[i]
=s;
return true;
}
}
}
return false;
}

int main()
{
int i,r,c,ans=0;
cin
>>n>>k;
for(i=0;i<k;i++)
{
cin
>>r>>c;
map[r][c]
=1;
}

for(i=1;i<=n;i++)
{
memset(vis,
0,sizeof(vis));
if(DFS(i))
ans
++;
}
cout
<<ans<<endl;
return 1;
}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2022-12-23
  • 2022-12-23
  • 2022-01-10
  • 2022-03-11
猜你喜欢
  • 2022-02-09
  • 2021-08-04
  • 2022-12-23
  • 2021-07-20
  • 2021-10-03
相关资源
相似解决方案