Asteroids(poj3041)匈牙利算法
#include <iostream>
using namespace std;
bool g[505][505];
bool b[505];
int n,k;
int link[505];
bool find(int a)
{
int i;
for (i = 1; i <= n; ++i)
{
if (g[a][i] && !b[i])
{
b[i] = true;
if (link[i] == 0 || find(link[i]))
{
link[i] = a;
return true;
}
}
}
return false;
}
int main()
{
scanf("%d %d", &n, &k);
int x, y;
int i;
memset(g,false,sizeof(g));
for (i = 0; i < k; ++i)
{
scanf("%d %d",&x, &y);
g[x][y] = true;
}
memset(link,0,sizeof(link));
int ans = 0;
for (i = 1; i <= n; ++i)
{
memset(b,false,sizeof(b));
if (find(i))
++ans;
}
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号