第一道额~~
#include<iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; int map[555][555]; int flag[555]; int link1[555]; int n,m; int can(int i) { int j; for(j=1;j<=m;j++) { if(!flag[j]&&map[i][j]) { flag[j]=1; if(link1[j]==-1||can(link1[j])) { link1[j]=i; return 1; } } } return 0; } int main() { int k; while(scanf("%d",&k),k!=0) { scanf("%d%d",&n,&m); int i; memset(map,0,sizeof(map)); for(i=0;i<k;i++) { int t1,t2; scanf("%d%d",&t1,&t2); map[t1][t2]=1; } int sum=0; memset(link1,-1,sizeof(link1)); for(i=1;i<=n;i++) { memset(flag,0,sizeof(flag)); if(can(i)) sum++; } printf("%d\n",sum); } }