zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    42     }
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    php生成excel
    gearmand
    开启Nginx的目录文件列表功能
    zend框架学习
    引用方法形成树
    智能指针实现
    图文例解C++类的多重继承与虚拟继承
    CC++定位崩溃代码行的方法
    C++函数重定义、重载、重写
    勤奋吧,一天一点,努力提高基本技能。
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4455126.html
Copyright © 2011-2022 走看看