链接:

id=2289">http://poj.org/problem?id=2289

意甲冠军:有n个人,m个分组,每一个人能够分配到一些组别。问怎样分能使得人数最多的组别人数最少。

思路:这道题二分+网络流也能够做,我这里是二分图多重匹配的做法。由于一个组别是一对多的关系,所以是多重匹配。我们二分多重匹配的限制,得到最小的限制可使二分图匹配,这个限制就是答案。

网上找的模板

  1. #include<cstring>
  2. #include<string>
  3. #include<fstream>
  4. #include<sstream>
  5. #include<iostream>
  6. #include<iomanip>
  7. #include<cstdio>
  8. #include<cctype>
  9. #include<algorithm>
  10. #include<queue>
  11. #include<map>
  12. #include<set>
  13. #include<vector>
  14. #include<stack>
  15. #include<ctime>
  16. #include<cstdlib>
  17. #include<functional>
  18. #include<cmath>
  19. using namespace std;
  20. #define PI acos(-1.0)
  21. #define MAXN 500010
  22. #define eps 1e-6
  23. #define INF 0x7FFFFFFF
  24. #define LLINF 0x7FFFFFFFFFFFFFFF
  25. #define seed 131
  26. #define MOD 1000000007
  27. #define ll long long
  28. #define ull unsigned ll
  29. #define lson l,m,rt<<1
  30. #define rson m+1,r,rt<<1|1
  31.  
  32. const int M=2010;
  33. int bmap[M][M]; //下标0開始
  34. bool bmask[M];
  35. int nx,ny;
  36. int vcy[M];
  37. int cy[M][M];
  38. int limit; //多重匹配限制
  39. bool findpath(int u){
  40. int i,j;
  41. for(i = 0; i < ny; i++){
  42. if(bmap[u][i] && !bmask[i]){
  43. bmask[i] = 1;
  44. if(vcy[i] < limit){
  45. cy[i][vcy[i]++] = u;
  46. return 1;
  47. }
  48. for(j = 0; j < vcy[i]; j++){
  49. if(findpath(cy[i][j])){
  50. cy[i][j] = u;
  51. return 1;
  52. }
  53. }
  54. }
  55. }
  56. return 0;
  57. }
  58. bool MulMatch(){
  59. memset(vcy,0,sizeof(vcy));
  60. for(int i=0; i < nx; i++){
  61. memset(bmask,0,sizeof(bmask));
  62. if(!findpath(i)) return 0;
  63. }
  64. return 1;
  65. }
  66. char str[5000];
  67. int main(){
  68. int i,j,x;
  69. while(scanf("%d%d",&nx,&ny),nx||ny){
  70. memset(bmap,0,sizeof(bmap));
  71. for(i = 0; i < nx; i++){
  72. scanf("%s", str);
  73. gets(str);
  74. stringstream sin(str);
  75. while(sin >> x){
  76. bmap[i][x] = 1;
  77. }
  78. }
  79. int l = 0, r = nx;
  80. while(l < r){
  81. limit = (l + r) / 2;
  82. if(MulMatch()) r = limit;
  83. else l = limit + 1;
  84. }
  85. printf("%d\n", r);
  86. }
  87. return 0;
  88. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

POJ--2289--Jamie&#39;s Contact Groups【二分图的多个匹配+二分法答案】的更多相关文章

  1. 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 ...

  2. Poj 2289 Jamie's Contact Groups (二分+二分图多重匹配)

    题目链接: Poj 2289 Jamie's Contact Groups 题目描述: 给出n个人的名单和每个人可以被分到的组,问将n个人分到m个组内,并且人数最多的组人数要尽量少,问人数最多的组有多 ...

  3. poj 2289 Jamie's Contact Groups【二分+最大流】【二分图多重匹配问题】

    题目链接:http://poj.org/problem?id=2289 Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K ...

  4. POJ 2289 Jamie's Contact Groups 二分图多重匹配 难度:1

    Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 6511   Accepted: ...

  5. POJ 2289——Jamie's Contact Groups——————【多重匹配、二分枚举匹配次数】

    Jamie's Contact Groups Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

  6. POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment

    这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...

  7. POJ 2289 Jamie's Contact Groups (二分+最大流)

    题目大意: 有n个人,可以分成m个组,现在给出你每个人可以去的组的编号,求分成的m组中人数最多的组最少可以有多少人. 算法讨论: 首先喷一下这题的输入,太恶心了. 然后说算法:最多的最少,二分的字眼. ...

  8. POJ2289 Jamie's Contact Groups —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-2289 Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 6 ...

  9. POJ - 2289 Jamie's Contact Groups (二分图多重匹配)

    题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...

随机推荐

  1. oracle11g创建新的用户和改动最大连接数

    create user test identified by root; grant create session,resource to root; alter user test account ...

  2. windows phone 获取手机图片库中图片(4)

    原文:windows phone 获取手机图片库中图片(4) 前置条件:手机和电脑未连接或连接电脑Zune软件关闭(与Zune软件连接时不允许访问图片库): 版本7.1 获取手机图片库图片的两种方式: ...

  3. 【译】手动处理Team Foundation Server 2010 数据仓库和分析服务数据库

    原贴地址:Manually Processing the Team Foundation Server 2010 Data Warehouse and Analysis Services Databa ...

  4. 记一个Oracle存储过程错误

    下面一个存储过程是创建一个job,在5秒后更新一个表: create or replace PROCEDURE P_TEST AS jobno number; BEGIN dbms_job.submi ...

  5. js日期天数差

    var s1 = "2007-01-01"; var s2 = "2007-12-31"; s1 = s1.replace(/-/g, "/" ...

  6. oracle错误之 ora-01017

    ora-01017 现象描述: scott用户和其它建立的用户,都登的上.但sys和system用户登录不上 方案一(试过,不行): 1,打开目录:F:\app\Administrator\produ ...

  7. CentOS6.5 Nginx优化编译配置

    说到Nginx,它真的算是我在运维工作中的好朋友,它优异的性能和极高的工作效率实在是让人大爱,来自internet的报告称其epoll模型能够支持高达50000个并发连接数. Epoll[维基百科]: ...

  8. jspsmart(支持中文下载)

    将excel文件从jsp页面导入到数据库,先将文件上传到server,然后读取,最后删除掉上传//要加encType="multipart/form-data"<form a ...

  9. Linux安装jdk 8和环境变量配置

    1.下载jdk 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.将刚刚 ...

  10. 802.11(wifi)的MAC层功能

    MAC层是802.11的主要功能部分.上层应用通过调用MAC层提供的接口原语调用MAC层的功能. MAC一共向上提供了2大类接口原语,共30种.数据(1)和管理(29).数据部分就是提供普通数据包的收 ...