题意

$m$个不同单位代表参加会议,第$i$个单位有$r_i$个人

$n$张餐桌,第$i$张可容纳$c_i$个代表就餐

同一个单位的代表需要在不同的餐桌就餐

问是否可行,要求输出方案

Sol

比较zz的最大流

从$S$向$1-m$连流量为$r_i$的边

从$m + 1$向$m + n$连流量为$c_i$的边

从$1-m$向$m + 1$到$m + n$中的每个点连流量为$1$的边

跑最大流即可

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int MAXN = 1e5 + , INF = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int M, N, S, T;
int r[MAXN], c[MAXN];
struct Edge {
int u, v, f, nxt;
}E[MAXN];
int head[MAXN], cur[MAXN], num;
inline void add_edge(int x, int y, int f) {
E[num] = (Edge){x, y, f, head[x]};
head[x] = num++;
}
inline void AddEdge(int x, int y, int z) {
add_edge(x, y, z);
add_edge(y, x, );
}
int sum = , deep[MAXN];
bool BFS() {
queue<int> q; q.push(S);
memset(deep, , sizeof(deep)); deep[S] = ;
while(!q.empty()) {
int p = q.front(); q.pop();
for(int i = head[p]; i != -; i = E[i].nxt) {
int to = E[i].v;
if(!deep[to] && E[i].f) {
deep[to] = deep[p] + ;
q.push(to);
}
}
}
return deep[T] > ;
}
int DFS(int x, int flow) {
if(x == T) return flow;
int ansflow = ;
for(int &i = cur[x]; i != -; i = E[i].nxt) {
int to = E[i].v;
if(deep[to] == deep[x] + && E[i].f) {
int nowflow = DFS(to, min(flow, E[i].f));
E[i].f -= nowflow; E[i ^ ].f += nowflow;
ansflow += nowflow; flow -= nowflow;
if(flow <= ) break;
}
}
return ansflow;
}
int Dinic() {
int ans = ;
while(BFS()) {
memcpy(cur, head, sizeof(head));
ans += DFS(S, INF);
}
return ans;
}
int main() {
memset(head, -, sizeof(head));
M = read(); N = read(); S = ; T = M + N + ;
for(int i = ; i <= M; i++) r[i] = read(), AddEdge(S, i, r[i]), sum += r[i];
for(int i = ; i <= N; i++) c[i] = read(), AddEdge(i + M, T, c[i]);
for(int i = ; i <= M; i++)
for(int j = ; j <= N; j++)
AddEdge(i, j + M, );
if(Dinic() >= sum) printf("1\n");
else {printf(""); return ;}
for(int x = ; x <= M; x++) {
for(int i = head[x]; i != -; i = E[i].nxt)
if(E[i].f == )
printf("%d ", E[i].v - M);
puts("");
}
return ;
}

洛谷P3254 圆桌问题(最大流)的更多相关文章

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

    传送门 一道良心啊……没那么多麻烦了…… 从$S$向所有单位连边,容量为单位人数,从所有桌子向$T$连边,容量为桌子能坐的人数,从每一个单位向所有桌子连边,容量为$1$,然后跑一个最大流,看一看$S$ ...

  2. 洛谷 P3254 圆桌问题【最大流】

    s向所有单位连流量为人数的边,所有饭桌向t连流量为饭桌容量的边,每个单位向每个饭桌连容量为1的边表示这个饭桌只能坐这个单位的一个人.跑dinic如果小于总人数则无解,否则对于每个单位for与它相连.满 ...

  3. 洛谷 [P3254] 圆桌问题

    简单最大流建图 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...

  4. 洛谷.3254.圆桌问题(最大流ISAP)

    题目链接 日常水题 还是忍不住吐槽这题奇怪的评价 #include <cstdio> #include <cctype> #include <algorithm> ...

  5. [洛谷P3254]圆桌问题

    题目大意:有$m$个单位,每个单位有$r_i$个代表,有$n$张餐桌,每张餐桌可容纳$c_i$个代表.要求同一个单位的代表不在同一个餐桌就餐.若可以,输出$1$以及其中一种方案,否则输出$0$ 题解: ...

  6. 洛谷P3254 圆桌问题 网络流_二分图

    Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ...

  7. Luogu P3254 圆桌问题(最大流)

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

  8. 洛谷.4015.运输问题(SPFA费用流)

    题目链接 嗯..水题 洛谷这网络流二十四题的难度评价真神奇.. #include <queue> #include <cstdio> #include <cctype&g ...

  9. [洛谷P3254] [网络流24题] 圆桌游戏

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

随机推荐

  1. POJ 2739 Sum of Consecutive Prime Numbers( *【素数存表】+暴力枚举 )

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895 ...

  2. 计算机学院大学生程序设计竞赛(2015’12)Happy Value

    Happy Value Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. JS点击查看更多内容 控制段落文字展开折叠

    JavaScript+jQuery实现的文字展开折叠效果,点击文字后文字内容会完整的显示出来,控制段落来显示文字,不需要的时候,可以再次点击后将内容折叠起来,也就是隐藏了一部分内容.点击查看更多的功能 ...

  4. 一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. 无限轮播器的bug修复

    前言:上一回实现了轮播器的自动滚动,但是有两个需要处理的bug. 1.增加需求:当用手拖拽控制轮播器的时候,停止自动滚动. 2.当同一个页面中有tableView,textView或scrollvie ...

  6. 字符串转Unicode码

    var str = '中'; var charCode = str.charCodeAt(0); console.log(charCode); // => 20013; str.charCode ...

  7. Spring中的扩展点

    Spring作为一个常用的IOC框架,在设计上预留了很多的扩展点,很多第三方开源框架,包括Spring自身也是基于这些扩展点实现的,这很好的体现了对修改关闭.对扩展开放的原则.总的来说Spring的扩 ...

  8. 推荐几本javascript与jquery的好书

    有人说只要了解了javascript的基本语法,就可以通过看别人的代码来学习javascript了,我不敢苟同.代码是死的,它很难让你有自己的想法,而一本好书如果结构清晰,各个章节都立意明确循序渐进( ...

  9. egret 和cocos2d-x-js哪个目前更稳定更好用? ?

    问题: 貌似cocos名气大一些?因为神经猫的大火才知道egret,玩了一下他们的demo,貌似性能一般,不过对flash开发者特别亲切.有人对比过这两个引擎吗?分析下 百牛信息技术bainiu.lt ...

  10. Linux系统之文件传输的几种方式

    Linux系统安装好以后以及能上网.能进行软件安装后,接下来可能就需要从其它机器复制一些文件或者把文件复制到其它机器,那么就涉及到文件的传输和共享,下面介绍一下常规的一些文件传输和共享方案. 1.传统 ...