- 如果后来的和以前的发生矛盾,则以前的优先退让。
- 如果以前的退让之后没有cp可处,则以前的拒绝退让,新来的去寻找下一个匹配。
- 如果新来的谁也匹配不上了,那就这么单着吧
#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); }