题意

$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 + 10, INF = 1e9 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', 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, 0);
}
int sum = 0, deep[MAXN];
bool BFS() {queue<int> q; q.push(S);memset(deep, 0, sizeof(deep)); deep[S] = 1;while(!q.empty()) {int p = q.front(); q.pop();for(int i = head[p]; i != -1; i = E[i].nxt) {int to = E[i].v;if(!deep[to] && E[i].f) {deep[to] = deep[p] + 1;q.push(to);}}}return deep[T] > 0;
}
int DFS(int x, int flow) {if(x == T) return flow;int ansflow = 0;for(int &i = cur[x]; i != -1; i = E[i].nxt) {int to = E[i].v;if(deep[to] == deep[x] + 1 && E[i].f) {int nowflow = DFS(to, min(flow, E[i].f));E[i].f -= nowflow; E[i ^ 1].f += nowflow;ansflow += nowflow; flow -= nowflow;if(flow <= 0) break;}}return ansflow;
}
int Dinic() {int ans = 0;while(BFS()) {memcpy(cur, head, sizeof(head));ans += DFS(S, INF);}return ans;
}
int main() {memset(head, -1, sizeof(head));M = read(); N = read(); S = 0; T = M + N + 1;for(int i = 1; i <= M; i++) r[i] = read(), AddEdge(S, i, r[i]), sum += r[i];for(int i = 1; i <= N; i++) c[i] = read(), AddEdge(i + M, T, c[i]);for(int i = 1; i <= M; i++)for(int j = 1; j <= N; j++)AddEdge(i, j + M, 1);if(Dinic() >= sum) printf("1\n");else {printf("0"); return 0;} for(int x = 1; x <= M; x++) {for(int i = head[x]; i != -1; i = E[i].nxt) if(E[i].f == 0)printf("%d ", E[i].v - M);puts("");}return 0;
}

转载于:https://www.cnblogs.com/zwfymqz/p/9365820.html

洛谷P3254 圆桌问题(最大流)相关推荐

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

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

  2. 洛谷 P3254 圆桌问题

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

  3. 洛谷P3980 志愿者招募——费用流

    洛谷P3980 [NOI2008]志愿者招募--费用流 题目介绍 题目描述 输入格式 输出格式 测试样例 题解 代码 题目介绍 题目描述 链接: 传送门. 申奥成功后,布布经过不懈努力,终于成为奥组委 ...

  4. 家园 / 星际转移问题(洛谷P2754 分层图+最大流)

    再一次感觉网络流太神奇了qwq 题目链接:[星际转移问题](P4009 汽车加油行驶问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)) 受到之前那道[汽车加油行驶问题](P400 ...

  5. 洛谷 - P2472 [SCOI2007]蜥蜴(最大流)

    题目链接:点击查看 题目大意:给出一个 n * m 的迷宫,每个位置都有一个耐久度,也就是至多经过 a[ i ][ j ] 位置 ( i , j ),现在迷宫中有一些蜥蜴,每一时刻在每一个位置至多有一 ...

  6. 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)

    题目链接:点击查看 题目大意:现在有k个人类需要从地球上转移到月球上去,现在有n个宇宙中转站,以及m个飞船周期性运载,每个飞船的载客都有一定的上限,但中转站的载客没有上限,现在给出每个飞船的路线,问最 ...

  7. 洛谷 P4015 运输问题(费用流)

    运输问题 题目描述 W W W 公司有 m m m 个仓库和 n n n 个零售商店.第 i i i 个仓库有 a i a_i ai​ 个单位的货物:第 j j j 个零售商店需要 b j b_j b ...

  8. 【洛谷P3376】网络最大流【网络流】

    分析 网络流算法本身是之前学过的,今天拿出来复习打个板子. 最原始的思路应该是搜索每一条路,每次进行增广的操作,知道不能增广为止.显然,这种思路复杂度比较高. 如何进行优化?就是dinic算法.上面那 ...

  9. 图论--网络流--最大流 洛谷P4722(hlpp)

    题目描述 给定 nn 个点,mm 条有向边,给定每条边的容量,求从点 ss 到点 tt 的最大流. 输入格式 第一行包含四个正整数nn.mm.ss.tt,用空格分隔,分别表示点的个数.有向边的个数.源 ...

最新文章

  1. linux 同步与异步--阻塞与非阻塞型I/O
  2. Hadoop集群中运行MapReduce程序错误记录
  3. 惊心动魄两秒钟——刷X200 SLIC2.1程序
  4. python使用redis在实际场景使用_用python操作redis及redis的一些应用场景
  5. 灵活而又可怕的params参数数组
  6. The Unique MST
  7. WebView起步1
  8. MySql-Proxy之多路结果集归并
  9. python绘制等距曲线_python应用之猪肉价格曲线的绘制
  10. c++修复工具_别再花钱修复旧照片啦!老照片一键修复工具,独创方法支持PS2020...
  11. 网关和路由器有什么区别
  12. word中设置文档的多级标题,如1,1.1,1.1.1等
  13. 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
  14. IDL处理葵花8Himawari-8标准HSD数据——制作大气校正数据集(太阳角度数据集)
  15. Android Binder学习(四)之addService流程分析
  16. linux测试消息队列阻塞,Linux进程间通信:消息队列
  17. 大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业
  18. 网易企业邮箱:与POP3、WebMail相比,为什么Imap4更被接受
  19. SpringBoot整合Minio实现文件上传、下载
  20. 计算机专业进银行和国家电网,银行春招与国家电网那个好?

热门文章

  1. Android编程获取网络连接状态及调用网络配置界面
  2. android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》
  3. JS得到对应字段 的值。遍历
  4. bff v2ex_语音备忘录的BFF-如何通过Machine Learning简化Speech2Text
  5. python使用socket实现协议TCP长连接框架
  6. Spring Cloud应用开发(三:客户端的负载均衡)
  7. catia怎么创建约束快捷键_答疑 | CATIA结构树无法显示怎么办?
  8. 1143 Lowest Common Ancestor(建树与不建两种思路)
  9. Java培训进阶书籍推荐,赶快收藏起来!
  10. Web前端面试自我介绍对话技巧注意事项