$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;
}
随机推荐
- Hadoop及HIVE学习宝典收集
Hive经常使用命令https://cwiki.apache.org/confluence/display/Hive/GettingStartedhttp://richardxu.com/hiveql ...
- docfx 做一个和微软一样的文档平台
开发中,有一句话叫 最不喜欢的是写文档,最不喜欢的是看别人家代码没有文档.那么世界上文档写最 la 好 ji 的就是微软了,那么微软的api文档是如何做的?难道请了很多人去写文档? 实际上微软有工具用 ...
- @bzoj - 3750@ [POI2015] Pieczęć
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一张 n*m 的方格纸,有些格子需要印成黑色,剩下的格子需要保留 ...
- shell awk杂项
awk '{ ;++i<=NF;){ a[i]=a[i]?a[i]",'\''"$i"'\''":"'\''"$i"'\'' ...
- HDU2087 剪花布条 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给定字符串 \(s\) 和 \(t\) ,找出 \(s\) 中出现不重叠的 \(t\) ...
- HDU 1864 01背包、
这题题意有点坑阿.感觉特别模糊. 我开始有一点没理解清楚.就是报销的话是整张整张支票报销的.也是我傻逼了 没一点常识 还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以 ...
- java接口(interface)
引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”→ 接口; 例子: 生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范 ...
- codeforce 378 div 2 F —— Drivers Dissatisfaction (最小生成树,LCA,倍增)
官方题解: If you choose any n - 1 roads then price of reducing overall dissatisfaction is equal to min(c ...
- UVA 11732——Trie
解题思路: 首先我们可以发现: 1.若两个字符串A.B不相等,且它们的公共前缀为S,则它们的比较次数为:2 * len(S) + 1: 2.若两个字符串相等,设为A,则它们的比较次数为 2 * ( l ...
- vue-router再学习
vue路由: 1:动态路由配置 import Vue from 'vue' import Router from 'vue-router' import Index from '@/view/inde ...