code:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #define N 2010 using namespace std; int n,m,e,ans; int vis[N][N]; int ask[N],matched[N]; inline bool found(int x){ for (int i = 1 ; i <= m ; i++) if (vis[x][i]){ if (ask[i]) continue; ask[i] = 1; if (!matched[i] || found(matched[i])) { matched[i] = x ; return true; } } return false; } inline void match(){ int cnt = 0; memset(matched,0,sizeof(matched)); for (int i = 1 ; i <= n ; i++){ memset(ask,0,sizeof(ask)); if (found(i)) cnt++; } ans = cnt; } int main(){ scanf("%d%d%d",&n,&m,&e); for (int i = 1 ; i <= e ; i++){ int x,y; scanf("%d%d",&x,&y); vis[x][y] = 1; } match(); printf("%d \n",ans); return 0; }