最大匹配裸题
#include<stdio.h> #include<string.h> int map[110][110],vis[110],link[110]; int n,m; int find(int u) { for(int i=1;i<=m;i++) if(map[u][i]==1&&vis[i]==0) { vis[i]=1; if(link[i]==-1||find(link[i])==1) { link[i]=u; return 1; } } return 0; } int main() { int i,j,k,x; while(scanf("%d%d",&n,&m)!=-1) { memset(map,0,sizeof(map)); for(i=1;i<=m;i++) { scanf("%d",&k); for(j=1;j<=k;j++) { scanf("%d",&x); map[x][i]=1; } } int sum=0; memset(link,-1,sizeof(link)); for(i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(find(i)==1) sum++; } printf("%d\n",sum); } }