uvalive 3268 二分图匹配 或者 最大流

来源:互联网 发布:企业数据接口 编辑:程序博客网 时间:2024/06/06 03:18
#include<cstdio>#include<cstring>#include<vector>using namespace std;vector<int>e[2010];int mat[1010][1010],vis[1010],num[1010],max_flow,n,m;char str[100];int match(int u){for(int i=0;i<e[u].size();i++){int v=e[u][i];if(!vis[v]){vis[v]=1;if(num[v]<max_flow){num[v]++;mat[v][num[v]]=u;return 1;}for(int j=1;j<=num[v];j++)if(match(mat[v][j])){mat[v][j]=u;return 1;}}}return 0;}int check(int x){max_flow=x;memset(num,0,sizeof(num));memset(mat,-1,sizeof(mat));for(int i=0;i<n;i++){memset(vis,0,sizeof(vis));if(!match(i))return 0;}return 1;}int main(){while(scanf("%d%d",&n,&m) == 2 && (n+m)){for(int i=0;i<n;i++)e[i].clear();for(int i=0;i<n;i++){scanf("%s",str);            char ch=getchar();            while(ch!='\n'){            int t;            scanf("%d",&t);            e[i].push_back(t);            ch=getchar();}}int l=0,r=n;while(l<r){int m=(l+r)/2;if(check(m)){r=m;}elsel=m+1;}printf("%d\n",l);}}

原创粉丝点击