1 条题解

  • 0
    @ 2025-10-8 17:07:33
    #include<bits/stdc++.h>
    using namespace std;
    const int N=(1<<11)+10;
    vector<int>G[N];
    int n,m,b[N];bool v[N],flg;
    void dfs(int x,int dep)
    {
    	if(flg) return ;
        if(dep>n){flg=1;return ;}
        for(int y:G[x])if(v[y]==0)
        {
            b[dep]=y;v[y]=1;
            dfs(y,dep+1);
            if(flg==1) return;
            b[dep]=0;v[y]=0;
        }
    }
    int main()
    {
        int k,s;scanf("%d",&k);n=(1<<k);s=n-1;
        for(int i=0,x;i<=s;i++)
        {
        	x=(i<<1)&s;
            if(i!=x)G[i].push_back(x);
    		x=((i<<1)&s)+1;
            if(i!=x)G[i].push_back(x);   
        }
        printf("%d ",n);
        for(int i=1;i<=k;i++)printf("0"); 
        memset(v,0,sizeof(v));
        flg=0;dfs(0,1);
        if(flg){for(int i=1;i<=n-k;i++)printf("%d",b[i]&1);}
        return 0;
    }
    
    • 1

    *【哈密顿回路】开关的哈密顿路径[BZOJ3033]太鼓达人

    信息

    ID
    4698
    时间
    1000ms
    内存
    64MiB
    难度
    9
    标签
    递交数
    10
    已通过
    4
    上传者