$loj6043$ [雅礼集训 $2017\ Day7$] 蛐蛐国的修墙方案 搜索
正解:搜索
解题报告:
首先由$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;
}
随机推荐
- Mysql——ERROR 1045 (28000): Access denied for user 'root'@'localhost'
1.修改my.ini,最后一行添加 skip-grant-tables ,保存关闭.(win10默认安装路径:C:\ProgramData\MySQL\MySQL Server 5.7) 2.重启 ...
- 1x1卷积
你可能会想为什么有人会用1x1卷积,因为它关注的不是一块像素,而是一个像素,图1 图1 我们看看传统的卷积,它基本上是运行在一个小块图像上的小分类器,但仅仅是个线性分类器.图2 图2 如果你在中间加一 ...
- theadClasses设置Bootstrap Table表头样式
通过theadClasses属性设置表头样式. thead-light设置灰色背景 //bootstrap table初始化数据 itxst.com $('#table').bootstrapTabl ...
- 原生js实现计时器
https://www.cnblogs.com/sandraryan/ 点击开始计时,可以计次,暂停.点了暂停可以继续计时,计次,点击重置清空. <!DOCTYPE html> <h ...
- TabHost选项卡的实现(一):使用TabActivity实现
一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...
- Python--day67--include包含其他的url和反向解析URL
1,include包含其他的url: 2,反向解析URL:
- Activiti学习之spring boot 与activiti整合
声明:本文是springboot2.0的多项目构建,springboot2.0和spingboot1.5的配置是有出入的,构建项目之前请规范您的springboot版本,选择2.0以上. 一.在IDE ...
- uva 562 Dividing coins(01背包)
Dividing coins It's commonly known that the Dutch have invented copper-wire. Two Dutch men were f ...
- (超级详细版)利用ThinkPHP3.2.3+PHPExcel实现将表格数据导入到数据库
请先阅读以下步骤再到结尾下载源码 第一步:下载 thinkphp_3.2.3 和 PHPExcel_1.8.0 并解压 对应的网站分别为: http://www.thinkphp.cn/down.ht ...
- angular 全局常用指令
1.全局支持 enter快捷键触发事件 // 全局指令 app.directive('ngEnter', ['$window',"$timeout", ($window,$time ...