洛谷 P2756 飞行员配对方案问题(最大流)
2018-01-16 08:01
561 查看
题面
题意
给出m+n个数,1~m中有些数可以与后面n个数匹配,问最多有几组匹配方法.方法
这题看上去与网络流没有多大关系,但是可以加一个源点,一个汇点,源点向m个点都连一条权值为1的边,后面n个点每个向汇点连一条边,求最大流即可.代码
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #define INF 0x3f3f3f3f using namespace std; int n,m,bb,first[310],deep[310],s,t,ans,an[310][2],aa; struct Bn { int to,next,quan; } bn[100010]; queue<int>que; inline void add(int u,int v,int w) { bn[bb].next=first[u]; bn[bb].to=v; bn[bb].quan=w; first[u]=bb; bb++; } inline bool bfs() { int p,q; memset(deep,0,sizeof(deep)); for(; !que.empty(); que.pop()); que.push(s); deep[s]=1; for(; !que.empty();) { q=que.front(); que.pop(); for(p=first[q]; p!=-1&&!deep[t]; p=bn[p].next) { if(deep[bn[p].to]||!bn[p].quan) continue; deep[bn[p].to]=deep[q]+1; que.push(bn[p].to); } } return deep[t]; } int dfs(int now,int mn) { if(now==t) { return mn; } int p,res; for(p=first[now]; p!=-1; p=bn[p].next) { if(deep[bn[p].to]!=deep[now]+1||!bn[p].quan) continue; res=dfs(bn[p].to,min(mn,bn[p].quan)); if(res) { if(now!=s&&bn[p].to!=t) { aa++; an[aa][0]=now; an[aa][1]=bn[p].to; } bn[p].quan-=res; bn[p^1].quan+=res; return res; } } return 0; } int main() { memset(first,-1,sizeof(first)); int i,j,p,q; cin>>m>>n; t=m+n+1; for(i=1; i<=m; i++) { add(0,i,1); add(i,0,0); } for(i=m+1; i<=m+n; i++) { add(i,t,1); add(t,i,0); } for(; p!=-1||q!=-1;) { scanf("%d%d",&p,&q); add(p,q,1); add(q,p,0); } for(; bfs();) { for(p=dfs(s,INF); p; ans+=p,p=dfs(s,INF)); } cout<<ans<<endl; for(;!que.empty();que.pop()); for(p=first[t];p!=-1;p=bn[p].next) { if(bn[p].quan) que.push(bn[p].to); } for(;!que.empty();) { q=que.front(); que.pop(); for(p=first[q];p!=-1;p=bn[p].next) { if(bn[p].quan) { printf("%d %d\n",bn[p].to,q); break; } } } }
相关文章推荐
- 洛谷 P2756 飞行员配对方案问题
- 洛谷 P2756 飞行员配对方案问题
- 洛谷 P2756 飞行员配对方案问题
- AC日记——飞行员配对方案问题 洛谷 P2756
- P2756 飞行员配对方案问题
- 网络流24题 飞行员配对方案问题___最大流
- 飞行员配对方案问题(二分图最大匹配)
- P2756 飞行员配对方案问题
- 洛谷 P 2756 飞行员配对方案问题
- P2756 飞行员配对方案问题(二分图??网络流??)
- 一、飞行员配对方案问题 [二分图的最大匹配]
- 洛谷 P 2756 飞行员配对方案问题
- [swust1736]飞行员配对方案问题(最大流,记录路径)
- [网络流24题] 飞行员配对方案问题 二分图/最大流
- [网络流24题] 飞行员配对方案问题 最大流 二分图最大匹配
- [洛谷2756]飞行员配对方案问题
- Luogu 2756 飞行员配对方案问题(二分图最大匹配)
- 飞行员配对方案问题(二分图的最大匹配)
- 线性规划与网络流24题の1 飞行员配对方案问题(最大匹配)
- 【CJOJ1494】【洛谷2756】飞行员配对方案问题