题意:一些女的和一些男的有好感,有好感的能一起坐过山车,问最多能组成多少对
hdu 11 页上少有的算法题,二分图匹配问题,匈牙利算法,对于每一个汉子,看和他有好感的妹子有没有配对了,没有配对过就可以成功配对,若已经配对过了,就看那个妹子所配对的汉子能不能再找个没有配对的妹子,如果可以就拆散当前配对重组配对,否则就不能拆;如果找完所有有好感的妹子仍然没能配对成功,那这个汉子就注定孤独一生了```
1 #include<stdio.h> 2 #include<string.h> 3 int now,head[1001],next[1001],point[1001],visit[1001],match[1001]; 4 5 void add(int x,int y){ 6 next[++now]=head[x]; 7 head[x]=now; 8 point[now]=y; 9 } 10 11 int dfs(int k) 12 { 13 for(int i=head[k];i;i=next[i]) if(!visit[point[i]]){ 14 int p=point[i]; 15 visit[p]=1; 16 if(match[p]==-1||dfs(match[p])){ 17 match[p]=k; 18 return 1; 19 } 20 } 21 return 0; 22 } 23 24 int main(){ 25 int K,M,N; 26 while(scanf("%d",&K)!=EOF&&K!=0){ 27 scanf("%d%d",&M,&N); 28 memset(match,-1,sizeof(match)); 29 memset(head,0,sizeof(head)); 30 now=0; 31 int i,ans=0; 32 for(i=1;i<=K;i++){ 33 int a,b; 34 scanf("%d%d",&a,&b); 35 add(a,b); 36 } 37 for(i=1;i<=M;i++){ 38 memset(visit,0,sizeof(visit)); 39 if(dfs(i)==1)ans++; 40 } 41 printf("%d ",ans); 42 } 43 return 0; 44 }