建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量。

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <ctime>
  8. #include <queue>
  9. #include <stack>
  10.  
  11. using namespace std;
  12.  
  13. template<const int _n>
  14. struct Edge
  15. {
  16. struct Edge_base { int to,w,next; }e[_n];
  17. int cnt,p[_n];
  18. Edge() { clear(); }
  19. void clear() { cnt=,memset(p,,sizeof(p)); }
  20. int start(const int x) { return p[x]; }
  21. Edge_base& operator[](const int x) { return e[x]; }
  22. void insert(const int x,const int y,const int z)
  23. { e[++cnt].to=y; e[cnt].next=p[x]; e[cnt].w=z; p[x]=cnt; return ; }
  24. };
  25.  
  26. int n,m,SSS,TTT;
  27. int level[],cur[];
  28. Edge<> e;
  29.  
  30. bool Bfs(const int S)
  31. {
  32. int i,t;
  33. queue<int> Q;
  34. memset(level,,sizeof(int)*(n+m+));
  35. level[S]=;
  36. Q.push(S);
  37. while(!Q.empty())
  38. {
  39. t=Q.front(),Q.pop();
  40. for(i=e.start(t);i;i=e[i].next)
  41. {
  42. if(!level[e[i].to] && e[i].w)
  43. {
  44. level[e[i].to]=level[t]+;
  45. Q.push(e[i].to);
  46. }
  47. }
  48. }
  49. return level[TTT];
  50. }
  51.  
  52. int Dfs(const int S,const int bk)
  53. {
  54. if(S==TTT)return bk;
  55. int rest=bk;
  56. for(int &i=cur[S];i;i=e[i].next)
  57. {
  58. if(level[e[i].to]==level[S]+ && e[i].w)
  59. {
  60. int flow=Dfs(e[i].to,min(rest,e[i].w));
  61. e[i].w-=flow;
  62. e[i^].w+=flow;
  63. if((rest-=flow)<=)break;
  64. }
  65. }
  66. if(rest==bk)level[S]=;
  67. return bk-rest;
  68. }
  69.  
  70. int Dinic()
  71. {
  72. int flow=;
  73. while(Bfs(SSS))
  74. {
  75. memcpy(cur,e.p,sizeof(int)*(n+m+));
  76. flow+=Dfs(SSS,0x3f3f3f3f);
  77. }
  78. return flow;
  79. }
  80.  
  81. int main()
  82. {
  83. freopen("roundtable.in","r",stdin);
  84. freopen("roundtable.out","w",stdout);
  85. int i,j,w,c,Sum=;
  86.  
  87. scanf("%d%d",&n,&m);
  88. SSS=n+m+;TTT=SSS+;
  89. for(i=;i<=n;++i)
  90. {
  91. scanf("%d",&w);
  92. e.insert(SSS,i,w);
  93. e.insert(i,SSS,);
  94. for(j=;j<=m;++j)
  95. {
  96. e.insert(i,j+n,);
  97. e.insert(j+n,i,);
  98. }
  99. Sum+=w;
  100. }
  101. for(i=;i<=m;++i)
  102. {
  103. scanf("%d",&c);
  104. e.insert(i+n,TTT,c);
  105. e.insert(TTT,i+n,);
  106. }
  107.  
  108. printf("%d\n",Dinic()==Sum?:);
  109.  
  110. stack<int> St;
  111. for(int t=;t<=n;++t)
  112. {
  113. for(i=e.start(t);i;i=e[i].next)
  114. {
  115. if(e[i].to==SSS)continue;
  116. if(e[i].w==)St.push(e[i].to-n);
  117. }
  118. while(!St.empty())printf("%d ",St.top()),St.pop();
  119. printf("\n");
  120. }
  121.  
  122. return ;
  123. }

[cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]的更多相关文章

  1. LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

  2. 【PowerOJ1740&网络流24题】圆桌聚餐(最大流)

    题意: 来自n个不同国家的代表开会,每个国家代表数为ci 会场有m张圆桌,每张桌子可容纳mi人 不希望有同一个国家的代表在同一张桌子上就餐 设计一个合法方案 (n,m<=300) 思路:最大流, ...

  3. Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流)

    Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流) Description 假设有来自n个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri.会议餐厅共有m张餐桌,每张餐桌 ...

  4. 【刷题】LOJ 6004 「网络流 24 题」圆桌聚餐

    题目描述 假设有来自 \(n\) 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 \(r_i\) .会议餐厅共有 \(m\) 张餐桌,每张餐桌可容纳 \(c_i\)​​ 个代表就餐. 为了使 ...

  5. Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)

    Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...

  6. Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)

    Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...

  7. LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流

    #6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. liberOJ#6006. 「网络流 24 题」试题库 网络流, 输出方案

    #6006. 「网络流 24 题」试题库     题目描述 假设一个试题库中有 n nn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 m mm 道题组成试卷.并要求 ...

  9. Cogs 731. [网络流24题] 最长递增子序列(最大流)

    [网络流24题] 最长递增子序列 ★★★☆ 输入文件:alis.in 输出文件:alis.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 给定正整数序列x1,-, xn. ( ...

随机推荐

  1. MSP430:中断简介

    (5).中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7;      //P1.7为输入 P1IE|=0x80;      //P ...

  2. VPS主机

    腾讯云企业认证 备案域名要是顶级域名格式,所以不能是www.blueheartzf.com,而要是blueheartzf.com

  3. 洛谷P1613 跑路(最短路+倍增)

    P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...

  4. [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. IOC框架---什么是IOC

    1 IoC理论的背景    我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.                    ...

  6. Java命名规范(新手宝典)

    很多刚开始学习Java的童鞋都不知道如何命名类文件,方法名,字段名,常量名等,今天抽出时间整理了了一下.大佬绕过 Java命名的组成规则:英文大小写字母,数字,$和_. 这里有几点需要注意: 不能以数 ...

  7. ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod

    因为突然要用到cocospod,突然发现在使用pod install的时候出现 -bash: pod: command not found 我去-不知道为什么,然后我就想重新安装下cocospod,在 ...

  8. ACM_3n+1问题(克拉兹问题+线段树区间查询最大值)

    3n+1问题 Time Limit: 2000/1000ms (Java/Others) Problem Description: 考虑如下的序列生成算法:从整数n开始,如果n是偶数,把它除以2:如果 ...

  9. 消息队列 (2) java实现简单的RabbtMQ

    假设有如下问题: 1.如果消费者连接中断,这期间我们应该怎么办? 2.如何做到负载均衡? 3.如何有效的将数据发送到相关的接收者?就是怎么样过滤 4.如何保证消费者收到完整正确的数据 5.如何让优先级 ...

  10. 跨域请求之jsonp

    1.什么是跨域请求: 服务器A上的一个页面,要请求服务器B上的一个处理程序,这就叫做跨域请求 本次的测试页面为: 处理程序kimhandler.ashx,如下: http://qxw119243026 ...