【网络流24题】试题库(二分图+最大流)
来源:互联网 发布:mac能玩的手游 编辑:程序博客网 时间:2024/06/05 07:58
传送门
试题库
I think
点集x,y分别放置试题与类型。源点向x集点连容量为1的边,x集点向y中其所属类型连容量为1的边,y集点向T连容量为所需量的边,求解最大流若等于总题数则有解。
Code
#include<cstdio>#include<queue>#include<vector>using namespace std;const int sm = 1100;const int sn = 22000;const int Inf = 0x3f3f3f3f;int N,k,M,S,T,tot=1,Flw; bool fl;int to[sn],nxt[sn],hd[sm],c[sn];int lev[sm],cur[sm];vector<int>Que[sm];int Min(int x,int y) { return x<y?x:y; } void Add(int u,int v,int w) { to[++tot]=v,nxt[tot]=hd[u],hd[u]=tot,c[tot]=w; to[++tot]=u,nxt[tot]=hd[v],hd[v]=tot,c[tot]=0;}bool Bfs() { for(int i=1;i<=T;++i) lev[i]=0; int t; queue<int>q; q.push(S);lev[S]=1; while(!q.empty()) { t=q.front(),q.pop(); for(int i=hd[t];i;i=nxt[i]) if(c[i]>0&&!lev[to[i]]) { lev[to[i]]=lev[t]+1; if(to[i]==T) return 1; q.push(to[i]); } } return 0;}int Dfs(int x,int mx) { if(x==T||!mx) return mx; int f; for(int i=cur[x]?cur[x]:hd[x];i;i=nxt[i]) { cur[x]=i; if(c[i]>0&&lev[to[i]]==lev[x]+1) if(f=Dfs(to[i],Min(mx,c[i]))) return c[i]-=f,c[i^1]+=f,f; } return 0;}void Dinic() { int f; while(Bfs()) { for(int i=1;i<=T;++i) cur[i]=0; while(f=Dfs(S,Inf)) Flw+=f; }}int main() { int u,v; scanf("%d%d",&k,&N); S=k+N+1,T=S+1; for(int i=1;i<=k;++i) { scanf("%d",&u); Add(N+i,T,u),M+=u; } for(int i=1;i<=N;++i) { scanf("%d",&v); Add(S,i,1); for(int j=1;j<=v;++j) scanf("%d",&u),Add(i,u+N,1); } Dinic(); if(Flw<M) puts("No Solution!"); else { for(int i=1;i<=N;++i) for(int j=hd[i];j;j=nxt[j]) if(to[j]!=S&&!c[j]) { Que[to[j]-N].push_back(i); break; } for(int i=1;i<=k;++i) { printf("%d:",i); for(int j=0;j<Que[i].size();++j) printf("%d ",Que[i][j]); putchar(10); } } return 0;}
阅读全文
0 0
- 【网络流24题】试题库(二分图+最大流)
- Cogs 732. [网络流24题] 试题库(二分图)
- 【网络流二十四题 试题库问题】【二分图多重匹配->最大流】
- 线性规划与网络流24题の7 试题库问题(二分图匹配)
- 732. [网络流24题] 试题库 费用流/最大最小值
- 【loj】#6006. 「网络流 24 题」试题库(二分图匹配)
- loj6006「网络流 24 题」试题库(最大流)
- [网络流24题 #7]试题库问题
- 【网络流24题】试题库问题
- 网络流24题之试题库问题
- 【网络流24题】试题库问题
- 网络流24题7. 试题库问题
- [网络流24题]试题库问题
- cogs 732. [网络流24题] 试题库
- COGS 732. [网络流24题] 试题库
- 「网络流 24 题」试题库
- 「网络流 24 题」试题库
- 网络流24题:试题库问题
- java多线程
- multipart/form-data 文件上传表单中 传递参数无法获取的原因!
- 阿里云域名和ip绑定步骤
- sun.misc.BASE64Encoder找不到jar包的解决方法
- 大四生活01:秋招准备
- 【网络流24题】试题库(二分图+最大流)
- 和为s的连续正数序列
- 谷歌,微软,百度等公司经典题库
- POJ
- python判断是否质数
- mysql设置2个主键
- JAVASE基础(十四)
- Python入门学习记录——List(列表)
- EXOPlayer简要学习及应用