zoukankan      html  css  js  c++  java
  • hdu 2063 过山车(二分图最大匹配基础)

    http://acm.hdu.edu.cn/showproblem.php?pid=2063

    思路:

    先给一个女生1找个对应的男生

    再到下个女生2 如果这个女生找到的男生已经有对应的女生1

    再找女生1的增广路

    到最后得到最大匹配

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll __int64
    #define MAXN 1000
    #define INF 0x7ffffff
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    using namespace std;
    int map[510][510];
    int vis[2000];
    int link[2000];
    int k,w,m,ans;
    int find(int x)
    {
        int i;
        for(i=1;i<=m;i++)
        {
            if(!vis[i]&&map[x][i])
            {
                vis[i]=1;
                if(!link[i]||find(link[i]))
                {
                    link[i]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        int i,j;
        int na,nv;
        while(scanf("%d",&k)!=EOF&&k)
        {        
            scanf("%d%d",&w,&m);
            ans=0;
            mem(map,0);
            mem(link,0);
            for(i=1;i<=k;i++)
            {
                scanf("%d%d",&nv,&na);
                map[nv][na]=1;
            }
            
            for(i=1;i<=w;i++)
            {
                mem(vis,0);
                if(find(i)) ans++;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    windows cmd command line 命令
    windows cmd color setup
    二进制中1的个数
    斐波拉契数列
    旋转数组的最小数字
    用两个栈实现队列
    重建二叉树
    Bootstrap学习笔记(三) 网格系统
    Bootstrap学习笔记(二) 表单
    Bootstrap学习笔记(一) 排版
  • 原文地址:https://www.cnblogs.com/sola1994/p/3911565.html
Copyright © 2011-2022 走看看