一切伟大的世界历史事件与人物,可以说都会出现两次
第一次是作为悲剧出现
第二次,则是作为笑剧出现
——《路易.巴拿马的雾月十八日》
题目连接
题解
简单DP。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M (1<<18)
using namespace std;
int n,m,t,dp[M],sum[5000];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin>>t;
while(t--){
memset(dp,0x3f3f3f3f,sizeof(dp));
memset(sum,0,sizeof(sum));
cin>>n>>m;
for(int x,i=0;i<n;i++){
cin>>x;
for(int y,j=0;j<x;j++)cin>>y,sum[i]+=1<<y;
}
dp[(1<<m)-1]=0;
for(int i=(1<<m)-1;i>=0;i--)
for(int j=0;j<n;j++)
if((sum[j]&i)!=0){
int tmp=sum[j]&i,q=i-tmp;
dp[q]=min(dp[q],dp[i]+1);
}
if(dp[0]==0x3f3f3f3f)cout<<"none"<<endl;
else cout<<dp[0]<<endl;
}
return 0;
}