zoukankan      html  css  js  c++  java
  • 【二分图】二分图的多重匹配

    某些问题中,会遇到一对多的二分图模型,即允许集合Y中的一个元素和集合X中的多个元素匹配(通常有一个最大限制n)

    /*二分图多重匹配算法*/
    const int MAXN=1001;//最大顶点数
    int bmap[MAXN][MAXN];//二分图
    bool bmask[MAXN];//寻找增广路径是的标志数组
    int nx,ny;//左右集合的顶点数目
    int vcy[MAXN];//vcy[i],右集合i顶点匹配到左集合的顶点数目
    int cy[MAXN][MAXN];//cy[i][j]右集合i顶点匹配的第j个元素
    int limit;//每个右集合顶点最多匹配的左集合顶点个数
    int left,right;//用于二分搜索
    /*寻找增广路径*/
    bool findpath(int u){
        int i,j;
        for(i=0;i<ny;i++){
            if(bmap[u][i]&&!bmask[i]){
                bmask[i]=1;
                if(vcy[i]<limit){
                    cy[i][vcy[i]++]=u;
                    return true;
                }
                for(j=0;j<vcy[i];j++){
                    if(findpath(cy[i][j])){
                        cy[i][j]=u;
                        return true;
                    }
                }
            }
        }
        return false;
    }
    /*求多重匹配*/
    bool MulMath(){
        memset(vcy,0,sizof(vcy));
        for(int i=0;i<nx;i++){
            memset(bmask,0,sizof(bmask));
            if(!findpath(i)) return false;
        }
        return true;
    }
    int main(){
        /*coding*/
        left=0;
        right=nx;
        while(left<right){
            limit=(left+right)/2;
            if(MulMath) right=limit;
            else l=limit+1;
        }
        /*coding*/
        return 0;
    }
  • 相关阅读:
    mybatis逆向工程
    fastdfs搭建和使用
    solr学习笔记
    自己搭建anki服务器
    redis总结
    java基础——队列
    遍历文件夹下的文件,并且获取文件名字
    xls到xml
    xls文件导入数据库
    PyCharm怎样添加Qt designer
  • 原文地址:https://www.cnblogs.com/Kohinur/p/9014921.html
Copyright © 2011-2022 走看看