7
1 5
2 5
5 1
5 3
3 6
7 4
4 8
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stdio.h>
using namespace std;
const int MAXN=555;
const int n=100;
vector<int> g[MAXN];
int form[MAXN],tot;
bool use[MAXN];
bool match(int x){
for(int i=0;i<g[x].size();i++){
if(!use[g[x][i]]){
use[g[x][i]]=true;
if(form[g[x][i]]==-1 || match(form[g[x][i]])){
form[g[x][i]]=x;
return x;
}
}
}
}
int hungary(){
tot=0;
memset(form,255,sizeof(form));
for(int i=1;i<=n;i++){
memset(use,0,sizeof(use));
if(match(i))
++tot;
}
return tot;
}
int main()
{
int N;
cin>>N;
int a,b;
int ans=0;
for(int i=1;i<=N;i++)
{
cin>>a>>b;
g[a].push_back(b);
}
ans=hungary();
cout<<ans<<endl;
}