提交时间:2022-07-19 14:49:20
运行 ID: 52620
#include<bits/stdc++.h> using namespace std; int n,m,k,c[45]; bool vis[8005][8005]; int u[7040005],v[7040005],cnt; int dp[12805][1<<15],ans; int main(){ scanf("%d%d",&n,&m); for(int i(1);i<=m;++i){ scanf("%d",&k); for(int j(1);j<=k;++j) scanf("%d",c+j); for(int a(1);a<k;++a) for(int b(a+1);b<=k;++b){ vis[c[a]][c[b]]=1; vis[c[b]][c[a]]=1; } } for(int i(1);i<n;++i) for(int j(i+1);j<=n;++j) if(vis[i][j]) u[++cnt]=i,v[cnt]=j; for(int i(1);i<=cnt;++i) for(int S(0);S<(1<<n);++S){ dp[i][S]=dp[i-1][S]; if((S&(1<<u[i]-1))&&(S&(1<<v[i]-1))) dp[i][S]=max(dp[i][S],dp[i-1][S^(1<<u[i]-1)^(1<<v[i]-1)]+1); ans=max(ans,dp[i][S]); } printf("%d\n",ans); return 0; }