题目链接

一道模板的带权二分图匹配
工作单位和餐桌分别为该二分图的两组点

  • 源点向每个单位所对应的点连一条流量为 r i r_i ri​ 的边,表示有 r i r_i ri​ 个人
  • 每个餐桌所对应的点想汇点连一条流量为 c i c_i ci​ 的边,表示可以容纳 c i c_i ci​ 人
  • 每一个单位向每一个餐桌连一条流量为 1 1 1 的边,表示(这个单位)可以有坐在对应的餐桌。

最后,如果最大匹配小于人数总和,说明没有满足要求的就餐方案,输出 0 0 0
否则就输出方案

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int Maxn=520,Maxm=100000,inf=0x3f3f3f3f;
int nxt[Maxm],to[Maxm],d[Maxn];
int flow[Maxm],head[Maxn];
int n,m,s,t,ans;
int edgecnt=1,tot;
inline int read()
{int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0' && ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();return s*w;
}
inline void add(int x,int y,int c)
{++edgecnt;nxt[edgecnt]=head[x];to[edgecnt]=y;flow[edgecnt]=c;head[x]=edgecnt;
}
bool bfs()
{queue <int> q;memset(d,0,sizeof(d));d[s]=1,q.push(s);while(q.size()){int x=q.front();q.pop();for(int i=head[x];i;i=nxt[i]){int y=to[i];if(!flow[i] || d[y])continue;d[y]=d[x]+1;if(y==t)return 1;q.push(y);}}return 0;
}
int dinic(int x,int cur)
{if(x==t)return cur;int ret=cur;for(int i=head[x];i && ret;i=nxt[i]){int y=to[i];if(!flow[i] || d[y]!=d[x]+1)continue;int tmp=dinic(y,min(ret,flow[i]));if(!tmp)d[y]=0;flow[i]-=tmp,flow[i^1]+=tmp,ret-=tmp;}return cur-ret;
}
int main()
{//  freopen("in.txt","r",stdin);n=read(),m=read();s=n+m+1,t=s+1;for(int i=1;i<=n;++i){int c=read();tot+=c;add(s,i,c);add(i,s,0);for(int j=n+1;j<=m+n;++j)add(i,j,1),add(j,i,0);}for(int i=n+1;i<=m+n;++i){int c=read();add(i,t,c);add(t,i,0);}int tmp;while(bfs())while(tmp=dinic(s,inf))ans+=tmp;if(ans!=tot){puts("0");return 0;}puts("1");for(int x=1;x<=n;++x){for(int i=head[x];i;i=nxt[i]){int y=to[i];if(y==s || y==t || flow[i])continue;printf("%d ",y-n);}putchar('\n');}return 0;
}

P3254 圆桌问题 题解相关推荐

  1. 洛谷 P3254 圆桌问题

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P3254 圆桌问题 题目 题目描述 有来自 m m m 个不同单位的代表参加一次国际会议.第 i i i 个单位派出了 r i r_ ...

  2. P3254 圆桌问题

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

  3. 洛谷P3254 圆桌问题(最大流)

    题意 $m$个不同单位代表参加会议,第$i$个单位有$r_i$个人 $n$张餐桌,第$i$张可容纳$c_i$个代表就餐 同一个单位的代表需要在不同的餐桌就餐 问是否可行,要求输出方案 Sol 比较zz ...

  4. 洛谷 - P3254 圆桌问题(最大流+路径打印)

    题目链接:点击查看 题目大意:n个单位的员工来吃饭,每个单位有ai名员工,现在有m张桌子,每张桌子能容纳bi个人,现在要求将每个员工分配到桌子上用餐,需要满足的一个要求是每张桌子上不能有相同单位的两个 ...

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

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

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

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

  7. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  8. 洛谷——网络流24题

    P2756 飞行员配对方案问题 P2762 太空飞行计划问题 P4014 分配问题 P2774 方格取数问题 P4009 汽车加油行驶问题 P4015 运输问题 P3254 圆桌问题 P2763 试题 ...

  9. DHU数据结构-循环单链表-ADT应用-圆桌问题

    目录 1.题目 2.题解 3.代码实现 1.题目 圆桌问题 作者: 冯向阳 时间限制: 1S 章节: DS:数组和链表 问题描述 : 目的:使用C++模板设计循环链表的抽象数据类型(ADT).并在此基 ...

最新文章

  1. 牛客网【每日一题】4月24日 子序列
  2. python中的repr是什么意思_python中str和repr有什么区别
  3. 拒绝用户“root”@“localhost”的访问(使用密码:yes)_使用PHP和Github Webhook实现自动部署
  4. python json库安装_jsonc库的安装以及简单使用
  5. 实际应用中installshield的事件处理
  6. 一个java文件可以有多个类嘛?
  7. Everything本地文件检索 快速搜索/共享神器
  8. 关于VBV-------Video Buffering Verifier
  9. 张子阳:如何在30岁前年薪超过30万
  10. Unable to read entire header,0 bytes read;expected 512 bytes
  11. SQL注入案例演示与防范措施大全
  12. matlab绘制圆极化波,圆极化波及其MATLAB仿真_西电
  13. idr寄存器、_STM32 GPIO寄存器 IDR ODR BSRR BRR
  14. 新华三交换机基于MAC的vlan划分
  15. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree
  16. 程序学3DMax之改变物体的中心轴及物体归置零点
  17. 多线程同步机制的几种方法
  18. 运行nrm包 nrm ls 时报错无法查询到可选择的镜像源地址的问题及解决方法
  19. AB分区保留面具升级系统(安卓11不丢面具升级系统)
  20. 日常办公耗材管理解决方案

热门文章

  1. vc只能调用matlab子函数,VC调用matlab函数
  2. ISO 27001 2022 中文版 范围
  3. web字体库加载优化_优化Web字体以提高性能:最新技术
  4. 如何快速的获取微博内容?
  5. autojs-ocr-easyedge-nodejs
  6. Java期末复习速成(八)
  7. 笨方法学python3怎么样_在python3中如何实现《笨方法学Python》ex11中的效果
  8. 使用UUP DUMP下载多版本Windows镜像
  9. sublime text3破解
  10. 【点云3D目标检测】IA-SSD报错:Expected isFloatingType(grads[i].scalar_type()) to be true, but got false.