#include<iostream>
#include<algorithm>
#include<list>
#include<string.h>
#include<math.h>
#include<vector>
#include<stdio.h>
using namespace std;
#define N 1005
int n,m;
struct node{
int to;
};
int match[N];
vector<int> g[N];
int used[N]={0};
bool findMatch(int k) {
for(int i=0;i<g[k].size();i++){
int to = g[k][i];
if(used[to]==1){
continue;
}
used[to] = 1 ;
if(match[to] ==0||findMatch(match[to])){
match[to] = k;
return true;
}
}
return false;
}
int main()
{
while(cin>>n>>m){
int total = 0;
memset(match,0,sizeof(match));
memset(g,0,sizeof(g));
memset(used,0,sizeof(used));
for(int i=1;i<=n;i++){
int k;
cin>>k;
for(int j=0;j<k;j++){
int stall;
cin>>stall;
g[i].push_back(stall);
}
}
for(int i=1;i<=n;i++){
if(findMatch(i)){
memset(used,0,sizeof(used));
total++;
}
}
cout<<total<<endl;
}
return 0;
}
最大匹配
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.