线性规划与网络流24——飞行员配对方案问题
2017-01-18 13:40
387 查看
题目链接点这里
二分图最大匹配裸题~
不过需要输出方案,,这题体现匈牙利算法的一个性质是 match [i]==-1时,,i比为非匹配点,,match[i]!=-1是,,比为匹配点
二分图最大匹配裸题~
不过需要输出方案,,这题体现匈牙利算法的一个性质是 match [i]==-1时,,i比为非匹配点,,match[i]!=-1是,,比为匹配点
#include<iostream> #include<map> #include<stdio.h> #include<algorithm> #include<queue> #include<set> #include<string.h> #include<string> #include<vector> #define MX 1111 #define INF 0x3f3f3f3f #define mem(x,y) memset(x,y,sizeof(x)) #define FIN freopen("input.txt","r",stdin) using namespace std; int nx,ny; int head[MX],rear; struct Edge { int nxt,to; } edge[1111*MX]; void edge_init() { mem(head,-1); rear=0; } void edge_add(int a,int b) { edge[rear].to=b; edge[rear].nxt=head[a]; head[a]=rear++; } bool vis[MX]; int matchxy[MX],matchyx[MX]; bool hungarian_dfs(int u) { for(int i=head[u]; ~i; i=edge[i].nxt) { int v=edge[i].to; if(vis[v]) continue; vis[v]=1; if(matchyx[v]==-1||hungarian_dfs(matchyx[v])) { matchyx[v]=u; matchxy[u]=v; return 1; } } return 0; } int hungarian() { mem(matchxy,-1); mem(matchyx,-1); int ret=0; for(int i=1; i<=nx; i++) { mem(vis,0); ret+=hungarian_dfs(i); } return ret; } int main() { //FIN; while(cin>>nx>>ny) { int a,b; edge_init(); while(cin>>a>>b,a!=-1) { edge_add(a,b); edge_add(b,a); } int ans=hungarian(); if(ans==0) puts("No Solution!"); else { printf("%d\n",ans); for(int i=nx+1; i<=nx+ny; i++) if(matchxy[i]!=-1)printf("%d %d\n",matchxy[i],i); } } return 0; }
相关文章推荐
- 线性规划与网络流24题 01飞行员配对方案问题
- 线性规划与网络流24题 1.飞行员配对方案问题(nefu 475)
- 线性规划与网络流24题 飞行员配对方案问题
- 线性规划与网络流24题 1飞行员配对方案问题
- 【线性规划与网络流】飞行员配对方案问题
- 网络流与线性规划24题01飞行员配对方案问题
- 线性规划与网络流24题 01飞行员分配方案问题
- 【线性规划与网络流24题 1】飞行员配对方案
- 网络流与线性规划24题01飞行员配对方案问题
- 【线性规划与网络流24题 1】飞行员配对方案
- P3386 【模板】二分图匹配(网络流与线性规划24题01飞行员配对方案问题)
- 网络流与线性规划24题01飞行员配对方案问题
- [网络流24题] 飞行员配对方案问题 最大流 二分图最大匹配
- [网络流24题]飞行员配对方案问题
- 网络流24题 飞行员配对方案问题
- 二分图匹配——Luogu2756 [网络流24题]飞行员配对方案问题
- [网络流24题 #1]飞行员配对方案问题
- 网络流24题 01 飞行员配对方案问题 (多源多汇点+最大流)
- [网络流24题][洛谷P2756]飞行员配对方案问题
- 线性规划与网络流24题 太空飞行计划问题 (最小割及输出方案)