提交时间:2022-07-19 11:52:19

运行 ID: 52314

#include<cstdio> #include<algorithm> using namespace std; const int N=8e3+10; int n,m; int k[4410],c[4410][41]; bool used[8010]; int ans; void dfs(int u,int sum,int lst) { if(sum+(m-sum+1)<=ans) return ; if(u==m+1||!lst) { ans=max(ans,sum); return ; } int x,y; for(int i=1;i<=k[u];i++) for(int j=i+1;j<=k[u];j++) { x=c[u][i],y=c[u][j]; if(!used[x]&&!used[y]) { used[x]=used[y]=1; dfs(u+1,sum+1,lst-2); used[x]=used[y]=0; } } dfs(u+1,sum,lst); } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d",&k[i]); for(int j=1;j<=k[i];j++) scanf("%d",&c[i][j]); } dfs(1,0,n); printf("%d\n",ans); return 0; }