6 3 3 1 1 1 2 1 3 2 1 2 3 3 1 0
3 直接套的匈牙利算法模板(最大二分匹配).#include<stdio.h> #include<string.h> using namespace std; #define MAXN 510 int G[MAXN][MAXN]; int Mgirl[MAXN],Mboy[MAXN]; bool mark[MAXN]; int m,n; bool findPath(int u) // DFS {int v;for(v=0;v<n;v++){if(G[u][v]&&!mark[v]){mark[v]=1;if(Mboy[v]==-1||findPath(Mboy[v])){Mboy[v]=u;Mgirl[u]=v;return 1;}}}return 0; } int MaxMatch() {int ans=0;int u;memset(Mgirl,-1,sizeof(Mgirl));memset(Mboy,-1,sizeof(Mboy));for(u=0;u<m;u++){if(Mgirl[u]==-1){memset(mark,0,sizeof(mark));if(findPath(u)){ans++;}}}return ans; } int main() {int i,j,k;int boy,girl;while(scanf("%d",&k),k) // m->girl n->boy{scanf("%d%d",&m,&n);memset(G,0,sizeof(G));for(i=0;i<k;i++){scanf("%d%d",&girl,&boy);G[girl-1][boy-1]=1;}printf("%dn",MaxMatch());}return 0; }
本文发布于:2024-02-05 06:43:02,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170726537263990.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |