题目链接

题意:Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是多

少?

 

一对多的二分图的多重匹配。二分图的多重匹配算法的实现类似于匈牙利算法,对于集合x中的元素xi,找到一个与其相连的元素yi后,检查匈牙利算法的两个条件是否成立,若yi未被匹配,则将

xi,yi匹配。否则,如果与yi匹配的元素已经达到上限,那么在所有与yi匹配的元素中选择一个元素,检查是否能找到一条增广路径,如果能,则让出位置,让xi与yi匹配。

二分求出limit,知道找到可以构成多重匹配的最小限制limit,在main函数中二分搜索。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. #include<algorithm>
  5. using namespace std;
  6. #define N 1010
  7. int vis[N], maps[N][N], ans, n, m;
  8. struct node
  9. {
  10. int cnt;///和yi相匹配的个数;
  11. int k[N];///和yi相匹配的x的集合;
  12. }Linky[N];
  13.  
  14. bool Find(int u, int limit)
  15. {
  16. for(int i=; i<=m; i++)
  17. {
  18. if(!vis[i] && maps[u][i])
  19. {
  20. vis[i] = ;
  21. if(Linky[i].cnt < limit)
  22. {
  23. Linky[i].k[ Linky[i].cnt++ ] = u;
  24. return true;
  25. }
  26. for(int j=; j<Linky[i].cnt; j++)
  27. {
  28. if(Find( Linky[i].k[j], limit ))
  29. {
  30. Linky[i].k[j] = u;
  31. return true;
  32. }
  33. }
  34. }
  35. }
  36. return false;
  37. }
  38.  
  39. bool xyl(int limit)///匈牙利算法;
  40. {
  41. memset(Linky, , sizeof(Linky));
  42. for(int i=; i<=n; i++)
  43. {
  44. memset(vis, , sizeof(vis));
  45. if(!Find(i, limit))///当前的limit让i没有匹配,所以不能用limit;
  46. return false;
  47. }
  48. return true;
  49. }
  50.  
  51. int main()
  52. {
  53. int x;
  54. char s[], ch;
  55. while(scanf("%d %d", &n, &m), m+n)
  56. {
  57. memset(maps, , sizeof(maps));
  58. for(int i=; i<=n; i++)
  59. {
  60. scanf("%s", s);
  61. while()
  62. {
  63. scanf("%d%c", &x, &ch);
  64. maps[i][x+] = ;
  65. if(ch == '\n')
  66. break;
  67. }
  68. }
  69. int L = , R = n;
  70. ans = n;
  71. while(L <= R)
  72. {
  73. int mid = (L+R)/;
  74. if(xyl(mid))///如果当前mid满足题意;
  75. {
  76. R = mid-;
  77. ans = mid;
  78. }
  79. else
  80. L = mid+;
  81. }
  82. printf("%d\n", ans);
  83. }
  84. return ;
  85. }

Jamie's Contact Groups---hdu1669--poj2289(多重匹配+二分)的更多相关文章

  1. POJ2289 Jamie's Contact Groups(二分图多重匹配)

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

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

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

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

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

  4. POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)

    Jamie's Contact Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/ ...

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

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

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

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

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

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

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

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

  9. Jamie's Contact Groups POJ - 2289(多重匹配 最大值最小化 最大流)

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

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

随机推荐

  1. 【Java NIO的深入研究】 ServerSocketChannel

    Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.ServerSocketChannel类在 jav ...

  2. Android SwipeMenuListView

     Android平台上的第三方开源项目SwipeMenuListView是一种能够在某一个view条目中响应用户左右側滑(从左向右,或从右向左滑动),滑出操作菜单的UI控件.类似这样的控件达到的U ...

  3. Fast-RCNN

    后面框架回归和分类都放到了神经网络里 测试速度提升100倍 训练10

  4. 处理unsigned相减错误(BIGINT UNSIGNED value is out of range)

    mysql 当两个字段想减时,如果其中一个或两个字段的类型的unsigned无签名类型,如果想减的值小于0则会报错(BIGINT UNSIGNED value is out of range) 测试: ...

  5. C++类中的static数据成员,static成员函数

    C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...

  6. js如何判断不同的操作系统

    <html> <head> <title>判断操作系统</title> <script type="text/javascript&qu ...

  7. 当新增页面和编辑页面使用同一jsp时

    <c:if test="${type eq '1'}"><title>新增页面</title></c:if> <c:if te ...

  8. Codeforces Round #375 (Div. 2)E. One-Way Reform

    题目链接:传送门 题目大意:一副无向图,要求你给边定向(变为有向图),使出度等于入度的点最多,输出有多少 个点,并且输出定向后的边(前为起点,后为终点) 题目思路:欧拉路 我们这样考虑,先考虑无向图的 ...

  9. linux下php安装

    nginx中配置php:  http://www.111cn.net/sys/nginx/64044.htm

  10. pvm虚拟机基本原理

    零.绪论:特别鸣谢下文博客,自己博客是对这篇博客的学习笔记: 大佬webber博客:https://www.cnblogs.com/webber1992/p/6597166.html 一.三种文件: ...