[cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]
建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量。
- #include <iostream>
- #include <algorithm>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <ctime>
- #include <queue>
- #include <stack>
- using namespace std;
- template<const int _n>
- struct Edge
- {
- struct Edge_base { int to,w,next; }e[_n];
- int cnt,p[_n];
- Edge() { clear(); }
- void clear() { cnt=,memset(p,,sizeof(p)); }
- int start(const int x) { return p[x]; }
- Edge_base& operator[](const int x) { return e[x]; }
- void insert(const int x,const int y,const int z)
- { e[++cnt].to=y; e[cnt].next=p[x]; e[cnt].w=z; p[x]=cnt; return ; }
- };
- int n,m,SSS,TTT;
- int level[],cur[];
- Edge<> e;
- bool Bfs(const int S)
- {
- int i,t;
- queue<int> Q;
- memset(level,,sizeof(int)*(n+m+));
- level[S]=;
- Q.push(S);
- while(!Q.empty())
- {
- t=Q.front(),Q.pop();
- for(i=e.start(t);i;i=e[i].next)
- {
- if(!level[e[i].to] && e[i].w)
- {
- level[e[i].to]=level[t]+;
- Q.push(e[i].to);
- }
- }
- }
- return level[TTT];
- }
- int Dfs(const int S,const int bk)
- {
- if(S==TTT)return bk;
- int rest=bk;
- for(int &i=cur[S];i;i=e[i].next)
- {
- if(level[e[i].to]==level[S]+ && e[i].w)
- {
- int flow=Dfs(e[i].to,min(rest,e[i].w));
- e[i].w-=flow;
- e[i^].w+=flow;
- if((rest-=flow)<=)break;
- }
- }
- if(rest==bk)level[S]=;
- return bk-rest;
- }
- int Dinic()
- {
- int flow=;
- while(Bfs(SSS))
- {
- memcpy(cur,e.p,sizeof(int)*(n+m+));
- flow+=Dfs(SSS,0x3f3f3f3f);
- }
- return flow;
- }
- int main()
- {
- freopen("roundtable.in","r",stdin);
- freopen("roundtable.out","w",stdout);
- int i,j,w,c,Sum=;
- scanf("%d%d",&n,&m);
- SSS=n+m+;TTT=SSS+;
- for(i=;i<=n;++i)
- {
- scanf("%d",&w);
- e.insert(SSS,i,w);
- e.insert(i,SSS,);
- for(j=;j<=m;++j)
- {
- e.insert(i,j+n,);
- e.insert(j+n,i,);
- }
- Sum+=w;
- }
- for(i=;i<=m;++i)
- {
- scanf("%d",&c);
- e.insert(i+n,TTT,c);
- e.insert(TTT,i+n,);
- }
- printf("%d\n",Dinic()==Sum?:);
- stack<int> St;
- for(int t=;t<=n;++t)
- {
- for(i=e.start(t);i;i=e[i].next)
- {
- if(e[i].to==SSS)continue;
- if(e[i].w==)St.push(e[i].to-n);
- }
- while(!St.empty())printf("%d ",St.top()),St.pop();
- printf("\n");
- }
- return ;
- }
[cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]的更多相关文章
- LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- 【PowerOJ1740&网络流24题】圆桌聚餐(最大流)
题意: 来自n个不同国家的代表开会,每个国家代表数为ci 会场有m张圆桌,每张桌子可容纳mi人 不希望有同一个国家的代表在同一张桌子上就餐 设计一个合法方案 (n,m<=300) 思路:最大流, ...
- Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流)
Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流) Description 假设有来自n个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri.会议餐厅共有m张餐桌,每张餐桌 ...
- 【刷题】LOJ 6004 「网络流 24 题」圆桌聚餐
题目描述 假设有来自 \(n\) 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 \(r_i\) .会议餐厅共有 \(m\) 张餐桌,每张餐桌可容纳 \(c_i\) 个代表就餐. 为了使 ...
- Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)
Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...
- Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)
Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...
- LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流
#6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- liberOJ#6006. 「网络流 24 题」试题库 网络流, 输出方案
#6006. 「网络流 24 题」试题库 题目描述 假设一个试题库中有 n nn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 m mm 道题组成试卷.并要求 ...
- Cogs 731. [网络流24题] 最长递增子序列(最大流)
[网络流24题] 最长递增子序列 ★★★☆ 输入文件:alis.in 输出文件:alis.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 给定正整数序列x1,-, xn. ( ...
随机推荐
- MSP430:中断简介
(5).中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1IE|=0x80; //P ...
- VPS主机
腾讯云企业认证 备案域名要是顶级域名格式,所以不能是www.blueheartzf.com,而要是blueheartzf.com
- 洛谷P1613 跑路(最短路+倍增)
P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...
- [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- IOC框架---什么是IOC
1 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. ...
- Java命名规范(新手宝典)
很多刚开始学习Java的童鞋都不知道如何命名类文件,方法名,字段名,常量名等,今天抽出时间整理了了一下.大佬绕过 Java命名的组成规则:英文大小写字母,数字,$和_. 这里有几点需要注意: 不能以数 ...
- ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod
因为突然要用到cocospod,突然发现在使用pod install的时候出现 -bash: pod: command not found 我去-不知道为什么,然后我就想重新安装下cocospod,在 ...
- ACM_3n+1问题(克拉兹问题+线段树区间查询最大值)
3n+1问题 Time Limit: 2000/1000ms (Java/Others) Problem Description: 考虑如下的序列生成算法:从整数n开始,如果n是偶数,把它除以2:如果 ...
- 消息队列 (2) java实现简单的RabbtMQ
假设有如下问题: 1.如果消费者连接中断,这期间我们应该怎么办? 2.如何做到负载均衡? 3.如何有效的将数据发送到相关的接收者?就是怎么样过滤 4.如何保证消费者收到完整正确的数据 5.如何让优先级 ...
- 跨域请求之jsonp
1.什么是跨域请求: 服务器A上的一个页面,要请求服务器B上的一个处理程序,这就叫做跨域请求 本次的测试页面为: 处理程序kimhandler.ashx,如下: http://qxw119243026 ...