hdu 2063 二分图 水题 最多多少组合数
基础二分图应用,注意理解
#include <stdio.h> #include <string.h> int k,m,n,a[501][501]; int visit[501]; int linker[501]; int dfs(int u) { int i; //visit[u]=1; for(i=1;i<=n;i++) { if(a[u][i]&&!visit[i]) { visit[i]=1; if(linker[i]==-1||dfs(linker[i])) { linker[i]=u; return 1; } } } return 0; } int main() { int start,end,res,i; while(scanf("%d",&k),k) { scanf("%d%d",&m,&n); memset(a,0,sizeof(a)); for(i=1;i<=k;i++) { scanf("%d%d",&start,&end); a[start][end]=1; } memset(linker,-1,sizeof(linker)); res=0; for(i=1;i<=m;i++) { memset(visit,0,sizeof(visit)); if(dfs(i)) res++; } printf("%d\n",res); } return 0; }