#6004. 「网络流 24 题」圆桌聚餐

内存限制:256 MiB时间限制:5000 ms标准输入输出
题目类型:传统评测方式:Special Judge
上传者: 匿名

提交提交记录统计讨论测试数据

题目描述

假设有来自 n nn 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 ri r_ir​i​​。会议餐厅共有 m mm 张餐桌,每张餐桌可容纳 ci c_ic​i​​ 个代表就餐。
为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。

试设计一个算法,给出满足要求的代表就餐方案。

输入格式

文件第 1 11 行有 2 22 个正整数 m mm 和 n nn,m mm 表示单位数,n nn 表示餐桌数。
文件第 2 22 行有 m mm 个正整数,分别表示每个单位的代表数。
文件第 3 33 行有 n nn 个正整数,分别表示每个餐桌的容量。

输出格式

如果问题有解,在文件第 1 11 行输出 1 11,否则输出 0 00。
接下来的 m mm 行给出每个单位代表的就餐桌号。如果有多个满足要求的方案,只要输出一个方案。

样例

样例输入

4 5
4 5 3 5
3 5 2 6 4

样例输出

1
1 2 4 5
1 2 3 4 5
2 4 5
1 2 3 4 5

数据范围与提示

1≤m≤150,1≤n≤270 1 \leq m \leq 150, 1 \leq n \leq 2701≤m≤150,1≤n≤270

题目链接:https://loj.ac/problem/6004

思路:最大流板子题

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
#define PI acos(-1.0)
const int maxn=500,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
const ll INF=1e18+7;
struct edge
{int from,to,cap,flow;
};
vector<edge>es;
vector<int>G[maxn];
bool vis[maxn];
int dist[maxn];
int iter[maxn];
void init(int n)
{for(int i=0; i<=n+10; i++) G[i].clear();es.clear();
}
void addedge(int from,int to,int cap)
{es.push_back((edge){from,to,cap,0});es.push_back((edge){to,from,0,0});int x=es.size();G[from].push_back(x-2);G[to].push_back(x-1);
}
bool BFS(int s,int t)
{memset(vis,0,sizeof(vis));queue <int> Q;vis[s]=1;dist[s]=0;Q.push(s);while(!Q.empty()){int u=Q.front();Q.pop();for (int i=0; i<G[u].size(); i++){edge &e=es[G[u][i]];if (!vis[e.to]&&e.cap>e.flow){vis[e.to]=1;dist[e.to]=dist[u]+1;Q.push(e.to);}}}return vis[t];
}
int DFS(int u,int t,int f)
{if(u==t||f==0) return f;int flow=0,d;for(int &i=iter[u]; i<G[u].size(); i++){edge &e=es[G[u][i]];if(dist[u]+1==dist[e.to]&&(d=DFS(e.to,t,min(f,e.cap-e.flow)))>0){e.flow+=d;es[G[u][i]^1].flow-=d;flow+=d;f-=d;if (f==0) break;}}return flow;
}
int Maxflow(int s,int t)
{int flow=0;while(BFS(s,t)){memset(iter,0,sizeof(iter));int d=0;while(d=DFS(s,t,inf)) flow+=d;}return flow;
}
int a[maxn],b[maxn];
int main()
{int n,m;scanf("%d%d",&n,&m);int s=0,t=n+m+1;init(n+m+10);int sum=0;for(int i=1; i<=n; i++){for(int j=1; j<=m; j++)addedge(i,j+n,1);}for(int i=1; i<=n; i++){scanf("%d",&a[i]);sum+=a[i];addedge(s,i,a[i]);}for(int i=1; i<=m; i++){scanf("%d",&b[i]);addedge(i+n,t,b[i]);}if(Maxflow(s,t)<sum) printf("0\n");else{printf("1\n");for(int i=0; i<n*m*2; i+=2){if(es[i].flow>0) printf("%d ",es[i].to-n);if(es[i].to-n==m) printf("\n");}}return 0;
}

最大流版子题

转载于:https://www.cnblogs.com/GeekZRF/p/7353048.html

LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题相关推荐

  1. loj #6004. 「网络流 24 题」圆桌聚餐(最大流)

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

  2. #6004. 「网络流 24 题」圆桌聚餐(重点整理两种网络流输出方式)

    P3254 圆桌问题 题意:就是让不同的单位的员工做不同的桌子,并输出方案. 建图很好想,就不多**了. 关键是路径输出: for(int i = 1; i <= m; i++){int len ...

  3. 【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)

    记录一个菜逼的成长.. 题目链接 二分图匹配,由于一个代表只能一桌,同一个代表团不能坐同一桌 所以代表团跟桌的流量设为1 #include <bits/stdc++.h> using na ...

  4. 「网络流 24 题」圆桌聚餐

    所有餐桌连源点容量为餐桌容量,所有单位连汇点容量为单位人数,题目要求同一单位不能再同一餐桌就餐,那么对于每个餐桌,与所有单位建边且容量为1即可,最后求一遍最大流. #include<stdio. ...

  5. 【网络流24题】圆桌聚餐

    LOJ 6004 [网络流24题]圆桌聚餐 题面 假设有来自\(n\)个不同单位的代表参加一次国际会议.每个单位的代表数分别为\(r_i\).会议餐厅共有\(m\)张餐桌,每张餐桌可容纳\(c_i\) ...

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

    [网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...

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

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

  8. 【LOJ 网络流24题】圆桌聚餐

    圆桌聚餐 题解: 从SSS向每个单位连接流量为rir_iri​的边,每个单位向每个桌子连接流量为111的边,每个桌子向TTT连接流量为cic_ici​的边,跑最大流即可.如果满流,即maxflow=m ...

  9. 【网络流24题】圆桌聚餐(二分图)

    传送门 圆桌聚餐 I think 增设源汇点S T,S向单位连容量为单位人数的边,每张桌子向T连容量为桌子容纳人数的边,每个人向每张桌子连容量为1的边,整张图的最大流==总人数时即有解. Code # ...

最新文章

  1. SunPower光伏组件出货量提高
  2. springMvc 的参数验证 BindingResult result 的使用
  3. Worktile:DNA中带有“效率”精神的协同软件企业
  4. 具有只读属性的ComboBox
  5. Kitten编程猫里如何先后播放不同的背景音乐
  6. T级图片数据Cache思路以及图片服务器搭建方法
  7. PHP框架最低支持PHP版本
  8. Win10下安装不同版本的MySQL
  9. mysql_fetch_row()获取显示数据
  10. Node.js安装教程
  11. IPIP.net状告阿里云抄袭侵权
  12. 如何更电计算机共享名称,电脑网络共享设置
  13. 【行业专题报告】城市、智慧城市-专题资料
  14. linux ubuntu因为没有正常关机,导致开机出现gun grub
  15. php三D立体模拟,CSS3使用3D环境实现立体魔方效果的实例代码分享
  16. 的路由放在本地_大佬私藏玩法,NAS还能当路由
  17. 如何将一个压缩包在不解压的情况下,进行分卷
  18. 数据地图绘制工具汇总
  19. 物联网实践|Huawei LiteOS开发环境搭建及在Hi3861上跑Demo
  20. 防止按钮重复点击的解决方案与思路

热门文章

  1. 日语语音之清音、浊音、半浊音、长音、促音、拨音、拗音
  2. 安卓手机版wps的pdf能朗读_quot;手机手电筒除了照明,还隐藏了这么多秘密!真的厉害了quot;...
  3. 修改EXCHANGE默认的收发邮件大小是10M
  4. golang打包加icon图标及其他程序信息
  5. 在微型计算机中术语svga是指,计算机试题分解.doc
  6. 大数据平台架构设计探究
  7. 机场精细化管理_【管理提升|青海机场公司召开2018年精细化管理经验交流会】...
  8. 阿里巴巴面试必过软件测试题目!!!
  9. cad无法安装_安装失败、弹窗错误!Autodesk都是娇气的主...(CAD/MAX完美安装工具)...
  10. 英特尔FPGA专业人才培养为创新添加新动能,为行业输送新生力