hdu 2063 二分图匹配

题意:一些女的和一些男的有好感,有好感的能一起坐过山车,问最多能组成多少对

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\n",ans);

42     }

43     return 0;

44 }
View Code

 

你可能感兴趣的:(HDU)