$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;
}
随机推荐
- Python基础:01Python标准类型分类
有三种不同的模式可以帮助我们对基本类型进行分类,每种模型都展示了这些类型之间的相互关系. 一:存储模式 这种分类模式,看这种类型的对象能保存多少个对象. 一个能保存单个字面对象的类型称为原子或标量存储 ...
- MaxCompute Studio使用心得系列7——作业对比
在数据开发过程中,我们通常需要将两个作业进行对比从而定位作业运行性能或者结果有差异的问题,但是对比作业时需要同时打开两个studio 的tab页,或者两个Logview页,不停切换进行对比,使用起来非 ...
- Microsoft.SQL.Server2012.Performance.Tuning.Cookbook学习笔记(一)
一.Creating a trace or workload 注意点: In the Trace Properties dialog box, there is a checkbox option i ...
- Streamy 解决办法
- 伪静态的实现方法:IIS环境下配置
URL 静态化可以提高搜索引擎抓取,开启本功能需要对 Web 服务器增加相应的 Rewrite 规则,且会轻微增加服务器负担.本教程讲解如何在 IIS 环境下配置各个产品的 Rewrite 规则. 下 ...
- AtCoder Beginner Contest 077 C Snuke Festival(二分)
二分水题,A,B,C三个数组排序,对于每个B[i],二分算出来有多少A比他小,多少C比他大,然后扫一遍出结果.O(nlog(n))水过. #include <bits/stdc++.h> ...
- 洛谷 2403 [SDOI2010] 所驼门王的宝藏
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐, ...
- ras 加解密类,支持截取
class RsaEncrypt{ private $_privateKey = false; private $_publicKey = false; /** * 私钥解密 * @param $da ...
- [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [中篇]
我们在<上篇>利用dotnet new命令创建了一个简单的控制台程序,接下来我们将它改造成一个ASP.NET Core应用.一个ASP.NET Core应用构建在ASP.NET Core框 ...
- Python--day46--用户管理设计方案介绍
1,基于用户权限管理: 2,基于角色的权限管理: 开始一个项目如果要100天的,可能70天都在设计,比如设计数据库表结构,最后30天才是写代码.设计是最难的,写代码是最简单的. 还有一个重要的一点,写 ...