好像多重匹配一般是用网络流来做的。。

这是匈牙利算法的模板:lim是每个组的上界

思路是每个组都可以匹配lim个点,那么当点x遇到的组匹配的点数还没有超过lim时,直接匹配即可

如果已经等于了lim,这时就要从这个组的lim个点里找到一个能匹配到其他组的点(类似于普通匹配的寻找增广路过程)

int dfs(int x,int lim){
for(int i=;i<=m;i++)//枚举每个组
if(!vis[i] && mp[x][i]){
vis[i]=;
if(match[i].size()<lim){
match[i].push_back(x);
return ;
}
//每个和i匹配的点
for(int j=;j<match[i].size();j++){
if(dfs(match[i][j],lim)){
match[i][j]=x;
return ;
}
}
}
return ;
}

完整代码

#include<bits/stdc++.h>
using namespace std;
#define N 2005
int n,m,mp[N][N],vis[N];
vector<int>match[N]; int dfs(int x,int lim){
for(int i=;i<=m;i++)//枚举每个组
if(!vis[i] && mp[x][i]){
vis[i]=;
if(match[i].size()<lim){
match[i].push_back(x);
return ;
}
//每个和i匹配的点
for(int j=;j<match[i].size();j++){
if(dfs(match[i][j],lim)){
match[i][j]=x;
return ;
}
}
}
return ;
} int judge(int lim){
for(int i=;i<=n;i++)match[i].clear();
for(int i=;i<=n;i++){
memset(vis,,sizeof vis);
if(!dfs(i,lim))return ;
}
return ;
} char s[N],ch;
int main(){
while(cin>>n>>m,n){
memset(mp,,sizeof mp);
for(int i=;i<=n;i++){
scanf("%s",s);
int j;
while(){
scanf("%d%c",&j,&ch);
mp[i][++j]=;
if(ch=='\n')break;
}
}
int l=,r=*n,mid,ans=;
while(l<=r){
mid=l+r>>;
if(judge(mid))
ans=mid,r=mid-;
else l=mid+;
}
cout<<ans<<endl;
}
}

二分图——多重匹配模板hdu1669的更多相关文章

  1. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  2. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  3. 稳定的奶牛分配 && 二分图多重匹配+二分答案

    题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...

  4. hiho 第117周 二分图多重匹配,网络流解决

    描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...

  5. POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)

    题意 现在要将5种型号的衣服分发给n个参赛者,然后给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,再给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能 ...

  6. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  7. POJ2584 T-Shirt Gumbo【二分图多重匹配】

    题目链接: id=2584">http://poj.org/problem?id=2584 题目大意: 如今有5种型号(S.M.L.X.T)的衣服要发放给N个參赛队员.给出每一个參赛者 ...

  8. 二分图最大匹配模板【匈牙利;Dinic最大流】

    二分图最大匹配模板[匈牙利:Dinic最大流] 匈牙利算法 int n,m; vector<int> map[100010]; int match[100010];//保存匹配的互相点 b ...

  9. 网络流24题 第五题 - PowerOJ1740 CodeVS1905 圆桌问题 二分图多重匹配 网络最大流

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - PowerOJ1740 - 有SPJ - 推荐 题目传送门 - CodeVS1905 - 无SPJ - 0% ...

随机推荐

  1. Win7+Ubuntu11.10(EasyBCD硬盘安装)----转载

    Win7+Ubuntu11.10(EasyBCD硬盘安装) ubuntu 下载地址:http://mirrors.163.com/ubuntu-releases/12.04/ 1)首先还是分区,在计算 ...

  2. JVM 与 Linux 的内存关系详解

    来源:美团技术团队 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m. ...

  3. 4.1_springboot2.2任务之异步、定时、邮件任务

    1.异步任务 ​ 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spri ...

  4. Interesting HDU - 5785 回文树

    题意: 找出所有[i,j]为回文串[j+1,k]也为回文串的i*k乘积之和. 题解: 设sum1[i] 为正着插入,到 i 的所有回文串的起始位置的前缀和,sum2[i] 表示反正插入的前缀和 ans ...

  5. List<VO>转成List<Map>

    List<A01090021BatchAddCheckVO> list = (ArrayList<A01090021BatchAddCheckVO>) result.get(& ...

  6. 2019-8-16-调试时限制程序使用-CPU-核心数模拟低端设备

    title author date CreateTime categories 调试时限制程序使用 CPU 核心数模拟低端设备 lindexi 2019-08-16 16:11:32 +0800 20 ...

  7. CSIC_716_20191102【input、数据类型概述、运算符】

    1.与用户交互 python2和python3在与用户交互方面存在差异. 在python3中,使用input( )方法提供用户输入,而在python2中,使用raw_input( )方法,才能实现同样 ...

  8. 天才ACM

    天才ACM 给定一个整数m,定义一个集合的权值为从这个集合中任意选出m对数(不够没关系,选到尽可能选,凑不成对的舍去),每对数两个数的差的平方的和的最大值. 现在给出一个数列\(\{a_i\}\),询 ...

  9. Qt Creator配置

    1.安装Git sudo apt install git 2.配置Git 用户和邮箱: git config --global user.name "xxx" git config ...

  10. hadoop镜像文件和编辑日志文件

    镜像文件和编辑日志文件 1)概念 namenode被格式化之后,将在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current目录中产生如下文件 edits_ ...