#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=1000+10;
int n,m,t,ans,link[MAXN];
bool g[MAXN][MAXN],vis[MAXN];
bool check(int x)
{
for(int i=1;i<=m;i++)
{
if(g[x][i]&&!vis[i])
{
vis[i]=true;
if(link[i]==0||check(link[i]))
{
link[i]=x;
return true;
}
}
}
return false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
for(int j=1;j<=t;j++)
{
int x;
cin>>x;
g[i][x]=true;
}
}
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(check(i))ans++;
}
cout<<ans;
return 0;
}
【算法模板】二分图匹配之匈牙利算法
猜你喜欢
转载自blog.csdn.net/ezluoyiqi/article/details/82957564
今日推荐
周排行