1 /* 2 公式: 3 二分图最小顶点覆盖 = 二分图最大匹配 4 DAG图的最小路径覆盖 = 节点数(n)- 最大匹配数 5 二分图最大独立集 = 节点数(n)- 最大匹配数 6 */ 7 8 #include <bits/stdc++.h> 9 using namespace std; 10 11 const int N=1234; 12 int n1,n2,k; 13 bool M[N][N],vis[N]; 14 int Link[N]; 15 16 bool Find(int x){ 17 for(int i=1;i<=n2;i++){ 18 if(M[x][i]&&!vis[i]){ 19 vis[i]=1; 20 if(!Link[i]||Find(Link[i])){ 21 Link[i]=x; 22 return true; 23 } 24 } 25 } 26 return false; 27 } 28 29 int main(){ 30 int x,y,ans=0; 31 scanf("%d%d%d",&n1,&n2,&k); 32 for(int i=1;i<=k;i++){ 33 scanf("%d%d",&x,&y); 34 M[x][y]=1; 35 } 36 for(int i=1;i<=n1;i++){ 37 memset(vis,0,sizeof(vis)); 38 if(Find(i)) ans++; 39 } 40 printf("%d\n",ans); 41 return 0; 42 }