博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]
阅读量:5041 次
发布时间:2019-06-12

本文共 2028 字,大约阅读时间需要 6 分钟。

建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;template
struct Edge{ struct Edge_base { int to,w,next; }e[_n]; int cnt,p[_n]; Edge() { clear(); } void clear() { cnt=1,memset(p,0,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[510],cur[510];Edge<110000> e;bool Bfs(const int S){ int i,t; queue
Q; memset(level,0,sizeof(int)*(n+m+3)); level[S]=1; 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]+1; 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]+1 && e[i].w) { int flow=Dfs(e[i].to,min(rest,e[i].w)); e[i].w-=flow; e[i^1].w+=flow; if((rest-=flow)<=0)break; } } if(rest==bk)level[S]=0; return bk-rest;}int Dinic(){ int flow=0; while(Bfs(SSS)) { memcpy(cur,e.p,sizeof(int)*(n+m+3)); flow+=Dfs(SSS,0x3f3f3f3f); } return flow;}int main(){ freopen("roundtable.in","r",stdin); freopen("roundtable.out","w",stdout); int i,j,w,c,Sum=0; scanf("%d%d",&n,&m); SSS=n+m+1;TTT=SSS+1; for(i=1;i<=n;++i) { scanf("%d",&w); e.insert(SSS,i,w); e.insert(i,SSS,0); for(j=1;j<=m;++j) { e.insert(i,j+n,1); e.insert(j+n,i,0); } Sum+=w; } for(i=1;i<=m;++i) { scanf("%d",&c); e.insert(i+n,TTT,c); e.insert(TTT,i+n,0); } printf("%d\n",Dinic()==Sum?1:0); stack
St; for(int t=1;t<=n;++t) { for(i=e.start(t);i;i=e[i].next) { if(e[i].to==SSS)continue; if(e[i].w==0)St.push(e[i].to-n); } while(!St.empty())printf("%d ",St.top()),St.pop(); printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/Gster/p/4996952.html

你可能感兴趣的文章
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
C# 启动进程和杀死进程
查看>>
tcp实现交互
查看>>
IIS的各种身份验证详细测试
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>