HDU2063 二分匹配基础题目

来源:互联网 发布:apache cxf 2.4 maven 编辑:程序博客网 时间:2024/05/29 12:49
#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>#define ll long long#define LL __int64#define eps 1e-8const ll INF=9999999999999;using namespace std;#define M 400000100#define inf 0xfffffff//vector<pair<int,int> > G;//typedef pair<int,int> P;//vector<pair<int,int>> ::iterator iter;//map<ll,int>mp;//map<ll,int>::iterator p;int mp[505][505];//建图表示关系int vis[505];//第i个男生是否被找过int marry[505]; //若marry[i]=u,那么表示第i个男生与女生u相配int k,n,m; void clear(){memset(mp,0,sizeof(mp)); memset(marry,0,sizeof(marry)); }int detal(int u) { for(int i=1;i<=m;i++) { if(!mp[u][i] || vis[i]) continue; vis[i]=1; if(!marry[i] || detal(marry[i])) { marry[i]=u; return 1; } } return 0; } int main() { int a,b; while(scanf("%d",&k),k) { scanf("%d%d",&n,&m); for(int i=0;i<k;i++) { scanf("%d%d",&a,&b); mp[a][b]=1; } int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(detal(i)) ans++; } printf("%d\n",ans); } return 0; } 

原创粉丝点击