AcWing 1394. 完美牛棚
原题链接
中等
#include<bits/stdc++.h>
using namespace std;
const int N=210;
int tmap[N][N];
int n,m;
bool st[N];
int match[N];
bool find(int x){
for(int i=1;i<=n;i++){
if(tmap[x][i]==1&&st[i]==false){
st[i]=true;
if(match[i]==0||find(match[i])){
match[i]=x;
return true;
}
}
}
return false;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
while(x--){
int a;
cin>>a;
tmap[i][a]=1;
}
}
int ans=0;
for(int i=1;i<=n;i++){
memset(st,false,sizeof st);
if(find(i)){
ans++;
}
}
cout<<ans<<endl;
return 0;
}