POJ 2289 Jamie's Contact Groups 二分图多重匹配 难度:1
| Time Limit: 7000MS | Memory Limit: 65536K | |
| Total Submissions: 6511 | Accepted: 2087 |
Description
Input
Output
Sample Input
3 2
John 0 1
Rose 1
Mary 1
5 4
ACM 1 2 3
ICPC 0 1
Asian 0 2 3
Regional 1 2
ShangHai 0 2
0 0
Sample Output
2
2
这是一对多的匹配,就是增广路改一改,改成num<limit时可以增广就行
如果group的匹配数小于当前要找的答案,那么就直接加入group的匹配集里,否则在匹配集里找可以增广的点修改
需要注意的是used数组,如果a->groupx->a就会无限调用,所以设置了一个used数组每次都清空,有点懒
#include <iostream>
#include <cstring>
#include <vector>
#include <sstream>
#include <string>
using namespace std; const int maxn=;
int m,n;
int num[maxn],cmp[maxn][maxn],used[maxn],tot;
vector<int > G[maxn]; void printg(){
for(int i=;i<n;i++){
for(int j=;j<G[i].size();j++){
int t=G[i][j];
cout<<"G["<<i<<"]["<<j<<"]:"<<t<<" ";
}
cout<<endl;
}
} bool fnd(int s,int limit){
for(int i=;i<G[s].size();i++){
int t=G[s][i];
if(used[t])continue;
used[t]=true;
if(num[t]<limit){cmp[t][num[t]++]=s;return true;}
for(int j=;j<num[t];j++){
if(fnd(cmp[t][j],limit)){
cmp[t][j]=s;
return true;
}
}
}
return false;
} bool hungry(int limit){
tot=;
memset(num,,sizeof(num));
for(int i=;i<n;i++){
memset(used,,sizeof(used));
if(fnd(i,limit))tot++;
}
if(tot==n)return true;
return false;
} int getans(int s,int e){
int mid=(s+e)/;
if(hungry(mid)){
return s==mid?mid:getans(s,mid);
}
return s==mid?e:getans(mid,e);
} string buff,rbuff;
int main(){
cin.tie();
ios::sync_with_stdio(false);
stringstream ss;
while(cin>>n>>m&&(n||m)){
getline(cin,rbuff);
for(int i=;i<n;i++){
G[i].clear();
getline(cin,rbuff);
ss.clear();
ss<<rbuff;
ss>>buff;
int t;
while(ss>>t){
t+=n;
G[i].push_back(t);
}
}
//printg();
if(m==)cout<<<<endl;
else {
int ans=getans(n/m,n+);
cout<<ans<<endl;
}
}
return ;
}
POJ 2289 Jamie's Contact Groups 二分图多重匹配 难度:1的更多相关文章
- POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】
Jamie's Contact Groups Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- POJ 2289 Jamie's Contact Groups(多重匹配+二分)
题意: Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是 ...
- POJ2289 Jamie's Contact Groups —— 二分图多重匹配/最大流 + 二分
题目链接:https://vjudge.net/problem/POJ-2289 Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 6 ...
- Poj 2289 Jamie's Contact Groups (二分+二分图多重匹配)
题目链接: Poj 2289 Jamie's Contact Groups 题目描述: 给出n个人的名单和每个人可以被分到的组,问将n个人分到m个组内,并且人数最多的组人数要尽量少,问人数最多的组有多 ...
- POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups / HDU 1699 Jamie's Contact Groups / SCU 1996 Jamie's Contact Groups (二分,二分图匹配)
POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups ...
- poj 2289 Jamie's Contact Groups【二分+最大流】【二分图多重匹配问题】
题目链接:http://poj.org/problem?id=2289 Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 65536K ...
- POJ - 2289 Jamie's Contact Groups (二分图多重匹配)
题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...
- POJ 2289 Jamie's Contact Groups 【二分】+【多重匹配】(模板题)
<题目链接> 题目大意: 有n个人,每个人都有一个或者几个能够归属的分类,将这些人分类到他们能够归属的分类中后,使所含人数最多的分类值最小,求出该分类的所含人数值. 解题分析: 看到求最大 ...
- POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment
这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...
随机推荐
- Java继承相关知识总结
Java继承的理解 一.概念: 一个新类从已有的类那里获得其已有的属性和方法,这种现象叫类的继承 这个新类称为子类,或派生类,已有的那个类叫做父类,或基类 继承的好处:代码得到极大的重用.形成一种类的 ...
- Go第一篇之轻松入门
Go语言简介 Go语言简史 Go 语言(或 Golang)是 Google 在 2007 年开发的一种开源编程语言,于 2009 年 11 月 10 日向全球公布.Go 是非常年轻的一门语言,它的主要 ...
- 简谈高通Trustzone的实现【转】
本文转载自:https://blog.csdn.net/hovan/article/details/42520879 从trust zone之我见知道,支持trustzone的芯片会跑在两个世界. 普 ...
- Qt Designer中文入门教程
Qt Designer窗口布局Layouts提供了四种布局方法,他们是: Vertical Layout 纵向布局Horizontal Layout 横向布局Grid Layout 栅格布局Form ...
- Pandas fillna('Missing')
https://blog.csdn.net/donghf1989/article/details/51167083/ .使用0替代缺失值(当然你可以用任意一个数字代替NaN) df.fillna(0) ...
- 【SVN】Linux搭建SVN服务
1.yum安装svn yum install -y subversion 日志打印 Loaded plugins: fastestmirror Determining fastest mirrors ...
- 【第二十一章】 springboot + 定时任务
1.application.properties #cron job.everysecond.cron=0/1 * * * * * job.everytensecond.cron=0/10 * * * ...
- 【第六章】 springboot + 事务
在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...
- Cent OS 常用配置命令
1.ifconfig #查看网络接口状态 2.ifconfig –a #查看主机所有接口的情况 3.ifconfig eth0 192.168.1.106 netmask 255.255.255 ...
- javascript版的quine程序-返回自身源码
引用自Wikipedia: 一个quine是一个计算机程序,它不接受任何输入,且唯一的输出就是自身的源代码. @cowboy (Ben Alman) 给出了一个用JavaScript写的quine程序 ...