過山車
1<=N 和M<=500.接下來的K行,每行有兩個數,分別表示女生Ai願意和男生Bj做partner。最後一個0結束輸入。
#include<cstdio>
#include<vector>
#include<string.h>
using namespace std;
#define H 505
vector<int> relation[H];
int male[H];
bool vis[H];
int k, m, n;
bool find(int x)
{
for(int i = 0; i < relation[x].size(); i++)
{
int v = relation[x][i];
if(!vis[v])
{
vis[v] = true;
if(male[v] == -1 || find(male[v]))
{
male[v] = x;
return true;
}
}
}
return false;
}
int main()
{
while(scanf("%d", &k), k)
{
for(int i = 0; i <= H; i++)
relation[i].clear();
scanf("%d %d", &m, &n);
for(int i = 1; i <= k; i++)
{
int a, b;
scanf("%d %d", &a, &b);
relation[a].push_back(b);
}
memset(male, -1, sizeof(male));
int sum = 0;
for(int i = 1; i <= m; i++)
{
memset(vis, false, sizeof(vis));
sum += find(i);
}
printf("%d\n", sum);
}
return 0;
}