时间复杂度O(nm)
vector<int>e[maxn];
int match[maxn];
int ans;
int vis[maxn];
set<pii>st;
bool dfs(int u){for(int v:e[u]){if(vis[v])continue;vis[v]=1;if(!match[v]||dfs(match[v])){match[v]=u;return true;}}return false;}
void solve(){int n,m,ed;cin>>n>>m>>ed;for(int i=1;i<=ed;i++){int u,v;cin>>u>>v;if(st.count({u,v}))continue;e[u].pb(v);st.insert({u,v});}for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(dfs(i))ans++;}cout<<ans<<endl;
}