题解

1 条题解

  • 1
    @ 2022-09-01 20:19:23
    #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

信息

ID
1615
难度
8
分类
搜索 点击显示
标签
递交数
1
已通过
1
通过率
100%
上传者