1 条题解
-
0Guest LV 0 MOD
-
1
#include<iostream> #include<cmath> using namespace std; const int N=22; int n,a[N],b[10485800]; struct node { int c,num; }h[100000001]; void sb() { int head=0,tail=1; h[1].num=0; while(head<tail) { head++; for(int i=1;i<=n;i++) { if((h[head].c&(1<<i))==0) { tail++; h[tail].c=(h[head].c&a[i])+pow(2,i); h[tail].num=h[head].num+1; if(b[h[tail].c]==1) { tail--; continue; } b[h[tail].c]=1; if(h[tail].c==8) { cout<<h[tail].num; return ; } } } } } int main() { cin>>n; int x,y; for(int i=1;i<=n;i++) { cin>>x; h[1].c+=(1<<i)*x; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i]+=1<<j; } cin>>x; for(int j=1;j<=x;j++) { cin>>y; a[i]-=1<<y; } } sb(); return 0; }
- 1