POJ - 2289 Jamie's Contact Groups (二分图多重匹配)
题意:N个人,M个团体。每个人有属于自己的一些团体编号。将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少。
分析:一个一对多的二分图匹配,且是最大值最小化问题。二分图的多重匹配建立在匈牙利算法的基础上,令每个Y部的点可匹配多个点,但是规定其上限,超过上限就要在已有的匹配点中寻找增广路。对于X部的点,只要有一个点没有被匹配,那么算法失败。以此二分确定答案,注意二分的姿势...
该题可做模板。
- #include<iostream>
- #include<stdio.h>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<vector>
- using namespace std;
- typedef long long LL;
- const int maxn = 1e3+,maxm = 5e5+;
- int N,M;
- struct Node{
- int K[maxn];
- }link[maxn];
- int cnt[maxn];
- struct Edge{
- int to,next;
- }edges[maxm];
- int head[maxn],tot;
- int linker[maxn];
- bool used[maxn];
- void init()
- {
- tot=;
- memset(head,-,sizeof(head));
- }
- void AddEdge(int u,int v)
- {
- edges[tot].to = v;
- edges[tot].next = head[u];
- head[u] = tot++;
- }
- bool dfs(int u,int limit){
- int v;
- for(int i=head[u];~i;i = edges[i].next){
- v = edges[i].to;
- if(!used[v]){
- used[v]=true;
- if(cnt[v]<limit){
- link[v].K[cnt[v]++]=u;
- return true;
- }
- for(int j=;j<cnt[v];++j){
- if(dfs(link[v].K[j],limit)){
- link[v].K[j]=u;
- return true;
- }
- }
- }
- }
- return false;
- }
- bool hungary(int limit){
- memset(cnt,,sizeof(cnt));
- for(int u=;u<=N;u++){
- memset(used,,sizeof(used));
- if(!dfs(u,limit)) return false; //只要有一个人不能匹配则失败
- }
- return true;
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("in.txt","r",stdin);
- freopen("out.txt","w",stdout);
- #endif
- int T,u,v,tmp,k;
- char c;
- while(scanf("%d%d",&N,&M)==){
- if(!N) break;
- init();
- for(int u=;u<=N;++u){
- char op[maxn];
- scanf("%s",op);
- while(true){
- scanf("%d%c",&v,&c);
- AddEdge(u,v+);
- if(c == '\n') break;
- }
- }
- int L=,R=N,mid,ans=N;
- while(L<=R){
- mid = (L+R)>>;
- if(hungary(mid)){
- ans = mid;
- R = mid-;
- }
- else L=mid+;
- }
- printf("%d\n",ans);
- }
- return ;
- }
POJ - 2289 Jamie's Contact Groups (二分图多重匹配)的更多相关文章
- POJ 2289 Jamie's Contact Groups 二分图多重匹配 难度:1
Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 6511 Accepted: ...
- 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个人,每个人都有一个或者几个能够归属的分类,将这些人分类到他们能够归属的分类中后,使所含人数最多的分类值最小,求出该分类的所含人数值. 解题分析: 看到求最大 ...
- POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment
这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...
随机推荐
- jQuery Colorbox使用教程
jQuery Colorbox是一款弹出层,内容播放插件,效果极佳,最关键的是大小只有10KB,当然我主要是用来弹出图片啦,(之前介绍过jquery Fancybox插件,个人很喜欢).jQuery ...
- 什么是ORM,以及在php上的使用?
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...
- 【BZOJ】1661: [Usaco2006 Nov]Big Square 巨大正方形(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1661 暴力大法好... 枚举对角线(注意,一种对角线2种情况就行了,自己想...) 然后可以算出其它 ...
- Canvas清屏的实现
/** * Canvas清屏的操作 * * 參考资料: http://blog.csdn.net/lfdfhl/article/details/9076001 * */ private void cl ...
- (转)Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup) ... ...
1. CurveField创建的是一个类型为AnimationCurve的曲线变量,看代码: [code]csharpcode: using UnityEngine; using System.Col ...
- Charlse 抓包
下载Charlse:https://www.charlesproxy.com/ 安装使用: https://www.cnblogs.com/ceshijiagoushi/p/6812493.html ...
- 【C语言天天练(二)】预处理
引言: 学C语言之初.一提到预处理,脑子里想到的就是#define的宏定义以及#include包括的头文件.后来随着对C的深入学习发现.预处理不止这些.比方条件编译.提前定义的宏等等.以下对此进行总结 ...
- 使用ghost硬盘对拷备份系统
公司有台server装了OA系统.要备份数据.同一时候假设系统出错之后可以及时回复.所以有买了块同型号硬盘. 用ghost的硬盘对拷功能,将原硬盘的系统和数据拷到新硬盘上.新硬盘挂到server上.当 ...
- svn服务器配置 for mac
本文转载至 http://blog.sina.com.cn/s/blog_5e42f31a010156z4.html 1.找到合适的目录,新建一个版本库的目录:mkdir svn 创建版本库:sv ...
- uiautomatorviewer.bat使用方法
在android目录下找到uiautomatorviewer.bat,然后双击,页面的第二个按钮连接设备 D:\Program Files\android-sdk-windows\tools\uiau ...