[网络流24题-7]圆桌问题
圆桌问题
就是比较裸的一个网络流qwq
直接建源点汇点
源点连单位流量Ci 桌子连汇点流量Ri 单位桌子两两连边流量为1限流就可以了
然后输出方案就看一下流了这条边就是坐了这个桌子就吼了
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define inf 20021225
#define maxn 100100
using namespace std;struct edge{int to,lt,f;}e[maxn<<4];
int in[maxn],nn,cnt=1,s,t,dep[maxn];
queue<int> que;
void add(int x,int y,int f)
{e[++cnt].to=y;e[cnt].lt=in[x];in[x]=cnt;e[cnt].f=f;e[++cnt].to=x;e[cnt].lt=in[y];in[y]=cnt;e[cnt].f=0;
}
bool bfs()
{memset(dep,0,sizeof(dep));while(!que.empty()) que.pop();dep[s]=1;que.push(s);while(!que.empty()){//printf("QAQ");int x=que.front();que.pop();for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(e[i].f&&!dep[y]){dep[y]=dep[x]+1;if(y==t) return 1;que.push(y);}}}return dep[t]!=0;
}
int dfs(int x,int f)
{//printf("QAQ");if(x==t||!f) return f;int cur=f;//printf("QAQ");for(int i=in[x];i;i=e[i].lt){int y=e[i].to;if(dep[y]==dep[x]+1&&e[i].f){int tmp=dfs(y,min(e[i].f,cur));//if(!tmp) dep[y]=-1;e[i].f-=tmp;e[i^1].f+=tmp;cur-=tmp;if(!cur) break;}}dep[x]=-1;return f-cur;
}
int c[300],r[300];
int dinic()
{int ans=0,w;while(bfs()){//while(w=dfs(s,inf))//{ ans+=dfs(s,inf);//printf("%d\n",w);//}}//printf("%d ",ans);return ans;
}
int main()
{int n,m,i,j,tot=0;scanf("%d%d",&m,&n);s=n+m+1;t=n+m+2;//nn=n+m+2;for(i=1;i<=m;i++){scanf("%d",&r[i]);add(s,i,r[i]);tot+=r[i];}for(i=1;i<=n;i++){scanf("%d",&c[i]);add(i+m,t,c[i]);for(j=1;j<=m;j++)add(j,i+m,1);}if(dinic()==tot){printf("1\n");for(i=1;i<=m;i++){for(int j=in[i];j;j=e[j].lt){if(e[j].to==s) continue;if(!e[j].f) printf("%d ",e[j].to-m);}printf("\n");}}else printf("0\n");return 0;
}
转载于:https://www.cnblogs.com/hanyuweining/p/10321958.html
[网络流24题-7]圆桌问题相关推荐
- LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- 【网络流24题】圆桌聚餐
LOJ 6004 [网络流24题]圆桌聚餐 题面 假设有来自\(n\)个不同单位的代表参加一次国际会议.每个单位的代表数分别为\(r_i\).会议餐厅共有\(m\)张餐桌,每张餐桌可容纳\(c_i\) ...
- loj #6004. 「网络流 24 题」圆桌聚餐(最大流)
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- 【网络流24题】圆桌聚餐(最大流)
[网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...
- 【LOJ 网络流24题】圆桌聚餐
圆桌聚餐 题解: 从SSS向每个单位连接流量为rir_iri的边,每个单位向每个桌子连接流量为111的边,每个桌子向TTT连接流量为cic_ici的边,跑最大流即可.如果满流,即maxflow=m ...
- 网络流24题 05圆桌聚餐
题目描述 假设有来自 n n 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 r_i r i .会议餐厅共有 m m 张餐桌,每张餐桌可容纳 c_i c i 个代表就餐. 为 ...
- 【网络流24题】圆桌聚餐(二分图)
传送门 圆桌聚餐 I think 增设源汇点S T,S向单位连容量为单位人数的边,每张桌子向T连容量为桌子容纳人数的边,每个人向每张桌子连容量为1的边,整张图的最大流==总人数时即有解. Code # ...
- #6004. 「网络流 24 题」圆桌聚餐(重点整理两种网络流输出方式)
P3254 圆桌问题 题意:就是让不同的单位的员工做不同的桌子,并输出方案. 建图很好想,就不多**了. 关键是路径输出: for(int i = 1; i <= m; i++){int len ...
- 「网络流 24 题」圆桌聚餐
所有餐桌连源点容量为餐桌容量,所有单位连汇点容量为单位人数,题目要求同一单位不能再同一餐桌就餐,那么对于每个餐桌,与所有单位建边且容量为1即可,最后求一遍最大流. #include<stdio. ...
最新文章
- c++经典代码大全_宁海檩条C型钢型号大全
- go io.reader 多次读取_Go 语言进阶:freecache 源码学习(1)
- python图片分析中央气象台降水量预报_php采集自中央气象台范围覆盖全国的天气预报代码实例...
- 接口自动化测试系列(二):深入分析HTTP状态码502
- 学习手记(2018/7/14~2018/7/18)——快乐纪中
- 深度学习入门:Day-11_CNN
- 洛谷 P5091 【模板】欧拉定理
- Typora列表段落(list paragraph)的行间距
- mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
- 外部表改为内部表_2、从外部导入数据创建表(ACCESS图解操作系列)
- 西门子plc 用c语言编程,西门子PLC常用指令举例
- BFO:Big Faceless PDF Library for JAVA
- Microsoft Visual SourceSafe的使用
- 广度优先算法之狄克斯特拉算法
- Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS
- 看《赘婿》我不仅收获了快乐,还收获了独特的目标管理方法(OKRs-E)
- DD-路径图、MM-路径图的定义与区别联系
- 如何学好 java?
- mysql经常断电_MySQL突然断电异常解决
- (5)数据库—----单行函数—------字符函数、数学函数、日期函数