正解:搜索

解题报告:

传送门$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;
}

随机推荐

  1. Mac OS X 常用快捷键一览

  2. python代码实现树莓派3b+驱动步进电机

    python代码实现树莓派3b+驱动步进电机 之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放那吃灰了.前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机.驱 ...

  3. 22-2 模板语言的进阶和fontawesome字体的使用

    一  fontfawesome字体的使用 http://fontawesome.dashgame.com/ 官网 1 下载 2 放到你的项目下面 3 html导入这个目录 实例: class最前面的f ...

  4. 谈一谈Python的上下文管理器

    经常在Python代码中看到with语句,仔细分析下,会发现这个with语句功能好强,可以自动关闭资源.这个在Python中叫上下文管理器Context Manager.那我们要怎么用它,什么时候用它 ...

  5. 待性能改善的一个SQL

    select t.*, t.rowid from tb_tk_datasakusei_ctrl t; alter table ATOMBB.TB_TK_JISSEKI_INFO_DETAIL add ...

  6. 两个[\\s\\S]*?之间可为空元素没有意义

    两个[\\s\\S]*?之间的* ? {0,n}等元素无效,即使出现这样的元素,也会被当做[\\s\\S]*?处理,[\\s\\S]*+也类似 除非两个[\\s\\S]*?之间设置必定出现的元素才有意 ...

  7. phpstorm 有的单词下有下划线,怎么去掉?

    settings -> Editor -> Colors & Fonts -> General ->Errors and Warnings然后你会看见下面的示例代码.点 ...

  8. 用一篇文章了解ppi,dpr,物理像素,逻辑像素,以及二倍图

    这篇文章能让你了解到什么是分辨率.dpr.dip.ppi (dpi相当于ppi,dpi用点表示物理像素密度,ppi是逻辑像素密度) 首先从最简单的ppi开始: 一部手机,有大有小,怎么知道手机的大小用 ...

  9. 2019-8-31-AutoHotKey-用打码的快捷键

    title author date CreateTime categories AutoHotKey 用打码的快捷键 lindexi 2019-08-31 16:55:58 +0800 2019-06 ...

  10. Vue 扩展插件