• $loj6043$ [雅礼集训 $2017 Day7$] 蛐蛐国的修墙方案 搜索


    正解:搜索

    解题报告:

    传送门$QwQ$

    首先由$p_i$是一个序列得,每个点的度数为2.且一定形成若干个环.

    考虑先对每个环做,发现若要有解必须是偶环,且一定是隔一条边选一条边的,所以对每个环其实只有2种方案.

    这时候搜索的复杂度是$O(2^{frac{n}{2}})$.依然是过不去的.

    继续考虑.发现如果环长为2,显然在左侧放左括号不会更劣(显然不解释了$QwQ$,于是复杂度就被降到了$O(2^{frac{n}{4}})$,就做完辣辣辣辣辣!

     

    #include<bits/stdc++.h>
    using namespace std;
    #define il inline
    #define lf double
    #define gc getchar()
    #define mp make_pair
    #define ri register int
    #define rc register char
    #define rb register bool
    #define lowbit(x) (x&(-x))
    #define rp(i,x,y) for(ri i=x;i<=y;++i)
    #define my(i,x,y) for(ri i=x;i>=y;--i)
    
    const int N=100+10;
    int n,p[N],cnt,ch[N];
    bool vis[N];
    vector<int>V[N];
    
    il int read()
    {
        rc ch=gc;ri x=0;rb y=1;
        while(ch!='-' && (ch>'9' || ch<'0'))ch=gc;
        if(ch=='-')ch=gc,y=0;
        while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=gc;
        return y?x:-x;
    }
    il void check()
    {
        ri sum=0;
        rp(i,1,n){sum+=ch[i];if(!(~sum))return;}
        rp(i,1,n)printf("%c",~ch[i]?'(':')');;exit(0);
    }
    void dfs(ri nw)
    {
        if(nw>cnt){check();return;}
        ri sz=V[nw].size();
        rp(i,0,sz-1)if(i&1)ch[V[nw][i]]=-1;else ch[V[nw][i]]=1;;dfs(nw+1);
        rp(i,0,sz-1)ch[V[nw][i]]=-ch[V[nw][i]];;dfs(nw+1);
    }
    
    int main()
    {
        //freopen("6043.in","r",stdin);freopen("6043.out","w",stdout);
        n=read();rp(i,1,n)p[i]=read();
        rp(i,1,n)
            if(!vis[i])
            {
                ri nw=i;++cnt;
                while(!vis[nw])vis[nw]=1,V[cnt].push_back(nw),nw=p[nw];
                if(V[cnt].size()==2){ch[V[cnt][0]]=1,ch[V[cnt][1]]=-1;V[cnt].clear();--cnt;}
            }
        dfs(1);
        return 0;
    }
    View Code

     

  • 相关阅读:
    jquery选择器
    js实现添加className
    日期函数(date)
    IE6和IE7中<a>标签宽高设置无效的问题
    Uva 548 二叉树的递归遍历lrj 白书p155
    Uva 122 树的层次遍历 Trees on the level lrj白书 p149
    Uva 679 Dropping Ballls 二叉树的编号
    Uva 12657 Boxes in a Line 双向链表
    Uva 11988 Broken Keyboard STL+链表
    埃及分数问题+迭代加深搜索
  • 原文地址:https://www.cnblogs.com/lqsukida/p/11605395.html
Copyright © 2020-2023  润新知