题意:有x个男生各自有喜欢的女生,y个女生各自有喜欢的男生。互相喜欢的在一起有好感度。问怎样好感度最高。
题解:匈牙利算法裸题。
代码:
#include <cstdio>
#include <cstring>
#define N 1500
int Map[N][N],M[N],vis[N];
int k,m,n;
bool dfs(int u){
for(int i=1;i<=n;i++){
if(Map[u][i]&&!vis[i]){
vis[i]=1;
if(M[i]==-1||dfs(M[i])){
M[i]=u;
return true;
}
}
}
return false;
}
int main(){
while(scanf("%d",&k)!=EOF){
if(k==0) break;
scanf("%d%d",&m,&n);
memset(Map,0,sizeof(Map));
for(int i=0;i<k;i++){
int from,to;
scanf("%d%d",&from,&to);
Map[from][to]=1;
}
memset(M,-1,sizeof(M));
int res=0;
for(int i=1;i<=m;i++){
memset(vis,0,sizeof(vis));
if(dfs(i)) res++;
}
printf("%d\n",res);
}
return 0;
}