6 3 31 11 21 32 12 33 10 Sample Output3 这个题是一个二分图的最大匹配,可以使用匈牙利算法,在这里推荐一个博客,感觉这个博主写得匈牙利算法写得不错:传送门#include<stdio.h>#include<string.h>#include<ctype.h>int n,m;bool line[550][550];int vis[550],boy[550];bool find(int x){ int i,j; for(j=1;j<=n;j++){ //扫描每一个boy if(!vis[j]&&line[x][j]){ //如果这个boy没有找过,且girl x愿意跟这个boy做partner; vis[j]=1; //标记这个boy,防止递归的时候重复; if(boy[j]==0||find(boy[j])){ //如果这个boy现在没有girl跟他做partner,或者能够腾出来找到其他的girl boy[j]=x; return true; } } } return false;}int main (){ int i,k,sum,a,b; while(~scanf("%d",&k)){ if(k==0) break; scanf("%d %d",&m,&n); memset(line,0,sizeof(line)); while(k--){ scanf("%d %d",&a,&b); line[a][b]=1; } memset(boy,0,sizeof(boy)); sum=0; for(i=1;i<=m;i++){ //扫描每一个girl ; memset(vis,0,sizeof(vis)); if(find(i)) //如果这个girl可以找到他的partner,则sum++; sum++; } printf("%d/n",sum); } return 0;}
新闻热点
疑难解答