圆桌问题

就是比较裸的一个网络流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]圆桌问题相关推荐

  1. LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

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

    LOJ 6004 [网络流24题]圆桌聚餐 题面 假设有来自\(n\)个不同单位的代表参加一次国际会议.每个单位的代表数分别为\(r_i\).会议餐厅共有\(m\)张餐桌,每张餐桌可容纳\(c_i\) ...

  3. loj #6004. 「网络流 24 题」圆桌聚餐(最大流)

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

  4. 【网络流24题】圆桌聚餐(最大流)

    [网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...

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

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

  6. 网络流24题 05圆桌聚餐

    题目描述 假设有来自 n n 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 r_i r ​i ​​ .会议餐厅共有 m m 张餐桌,每张餐桌可容纳 c_i c ​i ​​ 个代表就餐. 为 ...

  7. 【网络流24题】圆桌聚餐(二分图)

    传送门 圆桌聚餐 I think 增设源汇点S T,S向单位连容量为单位人数的边,每张桌子向T连容量为桌子容纳人数的边,每个人向每张桌子连容量为1的边,整张图的最大流==总人数时即有解. Code # ...

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

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

  9. 「网络流 24 题」圆桌聚餐

    所有餐桌连源点容量为餐桌容量,所有单位连汇点容量为单位人数,题目要求同一单位不能再同一餐桌就餐,那么对于每个餐桌,与所有单位建边且容量为1即可,最后求一遍最大流. #include<stdio. ...

最新文章

  1. c++经典代码大全_宁海檩条C型钢型号大全
  2. go io.reader 多次读取_Go 语言进阶:freecache 源码学习(1)
  3. python图片分析中央气象台降水量预报_php采集自中央气象台范围覆盖全国的天气预报代码实例...
  4. 接口自动化测试系列(二):深入分析HTTP状态码502
  5. 学习手记(2018/7/14~2018/7/18)——快乐纪中
  6. 深度学习入门:Day-11_CNN
  7. 洛谷 P5091 【模板】欧拉定理
  8. Typora列表段落(list paragraph)的行间距
  9. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
  10. 外部表改为内部表_2、从外部导入数据创建表(ACCESS图解操作系列)
  11. 西门子plc 用c语言编程,西门子PLC常用指令举例
  12. BFO:Big Faceless PDF Library for JAVA
  13. Microsoft Visual SourceSafe的使用
  14. 广度优先算法之狄克斯特拉算法
  15. Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS
  16. 看《赘婿》我不仅收获了快乐,还收获了独特的目标管理方法(OKRs-E)
  17. DD-路径图、MM-路径图的定义与区别联系
  18. 如何学好 java?
  19. mysql经常断电_MySQL突然断电异常解决
  20. (5)数据库—----单行函数—------字符函数、数学函数、日期函数

热门文章

  1. canvas之一:绘制直线
  2. DPDK源码编译(二十八)
  3. Sitecore 9有什么新功能
  4. [转]高颜值、好用、易扩展的微信小程序 UI 库,Powered by 有赞
  5. mysql集群之MMM简单搭建
  6. 交换机的VTP技术应用实训
  7. 怎么样用javascript获取触发事件的对象
  8. [FLASH_AS]Flash as3 addEventListener事件监听传递参数
  9. WINDOWS XP常用的快捷键组合?
  10. solidworks工具集_【第1975期】SolidWorks!从3D扫描到3D打印的一站式设计工具