题目链接:点击打开链接
Online JudgeOnline ExerciseOnline TeachingOnline ContestsExercise AuthorF.A.Q Hand In Hand Online Acmers Forum | Discuss Statistical Charts Best Coder beta VIP | STD Contests Virtual Contests DIY | Web-DIY beta Recent Contests Mail 0(0) Control Panel Sign Out
二分题模板,具体分析看代码吧
#include<cstdio> #include<cstring> int k,m,n; int fr[505][505];//是否愿意一组 int f[505];//成功匹配的情况 int vis[505];//有没有被查找过 bool find(int i) { for(int j=1;j<=n;j++) { if(fr[i][j]&&!vis[j])//女生i 愿意和男生j在一起 并且男生没有被查找过 { vis[j]=1;//被查找了标记一下 if(f[j])//男生j已经匹配女生, { if(find(f[j]))//并且该男生所匹配女生还可以匹配其他男生 ,那么可以让出该男生 { f[j]=i; return true; } } else { f[j]=i; return true; } } } return false; } int main() { while(~scanf("%d",&k),k)//有意愿的组合数 { scanf("%d %d",&m,&n);//女生数 男生数 memset(fr,0,sizeof(fr)); memset(f,0,sizeof(f)); int x,y,ans=0; while(k--) { scanf("%d %d",&x,&y); fr[x][y]=1; } for(int i=1;i<=m;i++) { memset(vis,0,sizeof(vis));//在女生i开始找匹配人员之前,所有男生都还没有被查找 if(find(i)) ans++; //该女生和男生匹配成功 } printf("%d\n",ans); } return 0; }