LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题
#6004. 「网络流 24 题」圆桌聚餐
题目描述
假设有来自 n nn 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 ri r_iri。会议餐厅共有 m mm 张餐桌,每张餐桌可容纳 ci c_ici 个代表就餐。
为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。
试设计一个算法,给出满足要求的代表就餐方案。
输入格式
文件第 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 题」圆桌聚餐 网络流版子题相关推荐
- loj #6004. 「网络流 24 题」圆桌聚餐(最大流)
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- #6004. 「网络流 24 题」圆桌聚餐(重点整理两种网络流输出方式)
P3254 圆桌问题 题意:就是让不同的单位的员工做不同的桌子,并输出方案. 建图很好想,就不多**了. 关键是路径输出: for(int i = 1; i <= m; i++){int len ...
- 【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)
记录一个菜逼的成长.. 题目链接 二分图匹配,由于一个代表只能一桌,同一个代表团不能坐同一桌 所以代表团跟桌的流量设为1 #include <bits/stdc++.h> using na ...
- 「网络流 24 题」圆桌聚餐
所有餐桌连源点容量为餐桌容量,所有单位连汇点容量为单位人数,题目要求同一单位不能再同一餐桌就餐,那么对于每个餐桌,与所有单位建边且容量为1即可,最后求一遍最大流. #include<stdio. ...
- 【网络流24题】圆桌聚餐
LOJ 6004 [网络流24题]圆桌聚餐 题面 假设有来自\(n\)个不同单位的代表参加一次国际会议.每个单位的代表数分别为\(r_i\).会议餐厅共有\(m\)张餐桌,每张餐桌可容纳\(c_i\) ...
- 【网络流24题】圆桌聚餐(最大流)
[网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...
- liberOJ#6006. 「网络流 24 题」试题库 网络流, 输出方案
#6006. 「网络流 24 题」试题库 题目描述 假设一个试题库中有 n nn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 m mm 道题组成试卷.并要求试卷 ...
- 【LOJ 网络流24题】圆桌聚餐
圆桌聚餐 题解: 从SSS向每个单位连接流量为rir_iri的边,每个单位向每个桌子连接流量为111的边,每个桌子向TTT连接流量为cic_ici的边,跑最大流即可.如果满流,即maxflow=m ...
- 【网络流24题】圆桌聚餐(二分图)
传送门 圆桌聚餐 I think 增设源汇点S T,S向单位连容量为单位人数的边,每张桌子向T连容量为桌子容纳人数的边,每个人向每张桌子连容量为1的边,整张图的最大流==总人数时即有解. Code # ...
最新文章
- SunPower光伏组件出货量提高
- springMvc 的参数验证 BindingResult result 的使用
- Worktile:DNA中带有“效率”精神的协同软件企业
- 具有只读属性的ComboBox
- Kitten编程猫里如何先后播放不同的背景音乐
- T级图片数据Cache思路以及图片服务器搭建方法
- PHP框架最低支持PHP版本
- Win10下安装不同版本的MySQL
- mysql_fetch_row()获取显示数据
- Node.js安装教程
- IPIP.net状告阿里云抄袭侵权
- 如何更电计算机共享名称,电脑网络共享设置
- 【行业专题报告】城市、智慧城市-专题资料
- linux ubuntu因为没有正常关机,导致开机出现gun grub
- php三D立体模拟,CSS3使用3D环境实现立体魔方效果的实例代码分享
- 的路由放在本地_大佬私藏玩法,NAS还能当路由
- 如何将一个压缩包在不解压的情况下,进行分卷
- 数据地图绘制工具汇总
- 物联网实践|Huawei LiteOS开发环境搭建及在Hi3861上跑Demo
- 防止按钮重复点击的解决方案与思路
热门文章
- 日语语音之清音、浊音、半浊音、长音、促音、拨音、拗音
- 安卓手机版wps的pdf能朗读_quot;手机手电筒除了照明,还隐藏了这么多秘密!真的厉害了quot;...
- 修改EXCHANGE默认的收发邮件大小是10M
- golang打包加icon图标及其他程序信息
- 在微型计算机中术语svga是指,计算机试题分解.doc
- 大数据平台架构设计探究
- 机场精细化管理_【管理提升|青海机场公司召开2018年精细化管理经验交流会】...
- 阿里巴巴面试必过软件测试题目!!!
- cad无法安装_安装失败、弹窗错误!Autodesk都是娇气的主...(CAD/MAX完美安装工具)...
- 英特尔FPGA专业人才培养为创新添加新动能,为行业输送新生力