https://www.luogu.org/problemnew/show/P1894
#include<bits/stdc++.h> #define maxn 200 using namespace std; inline int read() { int x=0; char c; c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=(x<<3)+(x<<1)+(c-48); c=getchar(); } return x; } vector<int>path[maxn+1]; int vis[maxn+1]; int res[maxn+1]; int find(int now) { //vis[now]=1; for(int i=0;i<path[now].size();i++) { int next=path[now][i]; if(!vis[next]) { vis[next]=1; if(res[next]==0||find(res[next])) { res[next]=now; return 1; } } } return 0; } int main() { int n; int m; n=read(); m=read(); for(int i=1;i<=n;i++) { int num; num=read(); for(int j=1;j<=num;j++) { int p; p=read(); path[i].push_back(p); } } int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(find(i))ans++; } cout<<ans; }