#include<stdio.h> #include<string.h> #include<algorithm> #include<bits/stdc++.h> using namespace std; int cnt; int n,m,t; const int maxn=1005; int mch[maxn],vistime[maxn]; vector<int> e[maxn]; int dfs(int u,int tag) { if(vistime[u]==tag) return 0; vistime[u]=tag; for(int j=0;j<e[u].size();j++) { int v=e[u][j]; if(mch[v]==0||dfs(mch[v],tag)) { mch[v]=u; return 1; } } return 0; } int main() { scanf("%d%d%d",&n,&m,&t); while(t--) { int u,v; scanf("%d%d",&u,&v); e[u].push_back(v); } int ans=0; for(int i=1;i<=n;i++) { if(dfs(i,i)) ++ans; } printf("%d\n",ans); }
原文:https://www.cnblogs.com/aacm/p/15140217.html