1. [网络流24题] 圆桌聚餐

    ★★ 输入文件:roundtable.in 输出文件:roundtable.out 评测插件

    时间限制:1 s 内存限制:128 MB

    «问题描述:

    假设有来自m 个不同单位的代表参加一次国际会议。每个单位的代表数分别为

    ri(i=1,2,3…m), 。会议餐厅共有n张餐桌,每张餐桌可容纳c i(i=1,2…n) 个代表就餐。

    为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。试设计一个算法,

    给出满足要求的代表就餐方案。

    «编程任务:

    对于给定的代表数和餐桌数以及餐桌容量,编程计算满足要求的代表就餐方案。

    «数据输入:

    由文件roundtable.in提供输入数据。文件第1行有2 个正整数m和n,m表示单位数,n表

    示餐桌数,1<=m<=150, 1<=n<=270。文件第2 行有m个正整数,分别表示每个单位的代表

    数。文件第3 行有n个正整数,分别表示每个餐桌的容量。

    «结果输出:

    程序运行结束时,将代表就餐方案输出到文件roundtable.out中。如果问题有解,在文件第

    1 行输出1,否则输出0。接下来的m行给出每个单位代表的就餐桌号。如果有多个满足要

    求的方案,只要输出1 个方案。

    输入文件示例 输出文件示例

    roundtable.in

    4 5

    4 5 3 5

    3 5 2 6 4 roundtable.out

    1

    1 2 4 5

    1 2 3 4 5

    2 4 5

    1 2 3 4 5
  1. /*
  2. 二分图多重匹配问题.
  3. 最大流.
  4. 和前几题做法相似.
  5. 建模的时候
  6. 从源点到货库建一条流量为库存量的边.
  7. 从货库与商店间建一条流量为1的边.
  8. 从商店到汇点建一条流量为所需量的边.
  9. dinic即可.
  10. */
  11. #include<iostream>
  12. #include<cstdio>
  13. #include<queue>
  14. #include<cstring>
  15. #define MAXN 10001
  16. using namespace std;
  17. struct data{int v,next,c;}e[MAXN*2];
  18. int n,m,max1=1e9,ans,total,cut=1,dis[MAXN],head[MAXN],next[MAXN];
  19. bool in[MAXN];
  20. inline int read()
  21. {
  22. int x=0,f=1;char ch=getchar();
  23. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  24. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  25. return x*f;
  26. }
  27. void add(int u,int v,int x)
  28. {
  29. e[++cut].v=v;
  30. e[cut].c=x;
  31. e[cut].next=head[u];
  32. head[u]=cut;
  33. }
  34. bool bfs()
  35. {
  36. memset(dis,-1,sizeof dis);
  37. queue<int>q;
  38. q.push(0);
  39. dis[0]=0;
  40. while(!q.empty())
  41. {
  42. int u=q.front();q.pop();
  43. for(int i=head[u];i;i=e[i].next)
  44. {
  45. int v=e[i].v;
  46. if(dis[v]==-1&&e[i].c)
  47. {
  48. dis[v]=dis[u]+1;
  49. q.push(v);
  50. }
  51. }
  52. }
  53. return dis[n+m+1]!=-1;
  54. }
  55. int dfs(int u,int y)
  56. {
  57. if(u==n+m+1) return y;
  58. int rest=0;
  59. for(int i=head[u];i&&rest<y;i=e[i].next)
  60. {
  61. int v=e[i].v;
  62. if(dis[v]==dis[u]+1&&e[i].c)
  63. {
  64. int x=dfs(v,min(e[i].c,y-rest));
  65. rest+=x;
  66. e[i].c-=x;
  67. e[i^1].c+=x;
  68. }
  69. }
  70. if(!rest) dis[u]=-1;
  71. return rest;
  72. }
  73. void print()
  74. {
  75. for(int u=1;u<=n;u++)
  76. {
  77. for(int i=head[u];i;i=e[i].next)
  78. {
  79. int v=e[i].v;
  80. if(!e[i].c) printf("%d ",v-n);
  81. }
  82. printf("\n");
  83. }
  84. }
  85. void dinic(int s,int t)
  86. {
  87. while(bfs()) ans+=dfs(s,max1);
  88. if(ans==total) {printf("1\n");print();}
  89. else printf("0");
  90. return ;
  91. }
  92. int main()
  93. {
  94. freopen("roundtable.in","r",stdin);
  95. freopen("roundtable.out","w",stdout);
  96. int x,y;
  97. n=read(),m=read();
  98. for(int i=1;i<=n;i++) x=read(),total+=x,add(0,i,x),add(i,0,0);
  99. for(int i=1;i<=m;i++) x=read(),add(n+i,n+m+1,x),add(n+m+1,n+i,0);
  100. for(int i=1;i<=n;i++)
  101. for(int j=1;j<=m;j++)
  102. add(i,n+j,1),add(n+j,i,0);
  103. dinic(0,n+m+1);
  104. return 0;
  105. }

Cogs 729. [网络流24题] 圆桌聚餐的更多相关文章

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

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

  2. COGS729. [网络流24题] 圆桌聚餐

    «问题描述:假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri(i=1,2,3...m), .会议餐厅共有n张餐桌,每张餐桌可容纳c i(i=1,2...n) 个代表就餐.为了 ...

  3. Cogs 14. [网络流24题] 搭配飞行员

    这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...

  4. [COGS 0014][网络流24题] 搭配飞行员

    先贴题面 14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out简单对比时间限制:1 s   内存限制:128 MB [问题描述]     飞行 ...

  5. 网络流24题——圆桌问题 luogu 3254

    题目传送门:这里 这是网络流24题里最简单的一道,我们从这里开始 虽然是网络流24题之一,但可以不用网络流... 本题采用贪心即可 有一个很显然的思想:在分配每一组时,我们都应当优先分配给当前可容纳人 ...

  6. Cogs 732. [网络流24题] 试题库(二分图)

    [网络流24题] 试题库 ★★ 输入文件:testlib.in 输出文件:testlib.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设一个试题库中有n道试题.每道试题 ...

  7. Cogs 739. [网络流24题] 运输问题(费用流)

    [网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: «编程任务: 对于给定的m 个仓库和n 个零售 ...

  8. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

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

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

随机推荐

  1. python学习-2 python安装和环境变量的设置

    python的下载 1.可以去python官网下载,https://www.python.org/ 2.下载完成后,安装即可.(具体可以百度,网上都有很多安装方法) python的检测 1.打开开始- ...

  2. 笔记-4:python组合数据类型

    1.字符串(str) 字符串是字符的序列表示, 根据字符串的内容多少分为单行字符串和多行字符串. 单行字符串可以由一对单引号(') 或双引号(")作为边界来表示, 单引号和双引号作用相同. ...

  3. 【Python基础】05_Python中的while循环

    1.程序的三大流程介绍 顺序 —— 从上到下,顺序执行 分支 —— 根据条件判断,决定代码的分支 循环 —— 让特定代码执行 2.while 基本语法 while 条件(判断 计数器 是否达到 目标次 ...

  4. Grace模式、Saint模式

    一.probe(后端探针) 探测后端,确定他们是否健康,返回的状态用req.backend.healthy核对 backend b1 { .host = "127.0.0.1"; ...

  5. SimpleDateFormat线程安全问题

    今天线上出现了问题,从第三方获取的日期为 2019-12-12 11:11:11,通过SimpleDateFormat转换格式后,竟然出现完全不正常的日期数据,经百度,得知SimpleDateForm ...

  6. springboot+eureka+mybatis+mysql环境下报504 Gateway Time-out

    1.test环境下的数据库配置的 driver和url有问题, 在工程日志中的表现是不能打印出最新的日志,在部署前的日志能看到报错:

  7. ScrumBasic开发记录

    ScrumBasic 是基于asp.net core 1.0的开源敏捷管理软件.目前第一版.目前只有很基础的东西.希望我能将这个项目演变下去. 地址:https://github.com/CAH-Fl ...

  8. 【原创】大叔经验分享(77)openresty(nginx+lua)发http请求

    openresty(nginx+lua)发http请求 利用location+proxy_pass间接实现 location ^~ /test/http { internal; proxy_pass ...

  9. [转载]目标检测-Selective Search

    [转载]目标检测-Selective Search 转载纯粹是因为这篇写的很好,mark一下: https://zhuanlan.zhihu.com/p/27467369

  10. 使用nodejs对Marketing Cloud的contact主数据进行修改操作

    假设在Marketing Cloud有这样一个contact主数据: 现在需求是使用编程语言比如nodejs修改这个contact实例的高亮属性. 代码如下: var config = require ...