| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 16379 | Accepted: 8930 |
Description
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
Hint
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <iostream>
#include <string>
#include <stack>
#include <queue>
#include <algorithm>
#define N 500+20
#define INF 0x3f3f3f3f
using namespace std;
int n, m;
int map[N][N];
int link[N];
bool vis[N];
bool match( int u )
{
for(int i=1; i<=n; i++)
{
if(vis[i]==false && map[u][i]==1 )
{
vis[i]=true;
if(link[i]==-1 || match(link[i]) )
{
link[i]=u;
return true;
}
}
}
return false;
}
int main()
{
int i, j, k;
int u, v;
scanf("%d %d", &n, &m);
memset(map, 0, sizeof(map));
for(i=0; i<m; i++ ){
scanf("%d %d", &u, &v);
map[u][v] = 1;
}
memset(link, -1, sizeof(link));
int ans=0;
for(int i=1; i<=n; i++)
{
memset(vis, false, sizeof(vis));
if(match(i))
ans++;
}
printf("%d\n", ans );
return 0;
}
poj 3041 Asteroids(二分图 *【矩阵实现】【最小点覆盖==最大匹配数】)
原文:http://www.cnblogs.com/yspworld/p/4372741.html