感觉有点假

题目大意

数据范围:$n<=100$


题目分析

由于题目给出的是 置换,所以相当于只需枚举每个环的两个状态。

主要是复杂度分析这里:

一元环:不存在

二元环:特判保平安

三元环:不存在

四元环:复杂度$O(2^{25})$,但是特判一下顺序就可以秒下来了

六元环:复杂度$O(2^{17})$至此及以后的复杂度都是可以接受的了

不知道为什么倒着搜就会更快?

 #include<bits/stdc++.h>
const int maxn = ; int n,las,p[maxn],w[maxn],deg[maxn]; void dfs(int x)
{
if (x==){
if (las) return;
for (int i=; i<=n; i++)
putchar(w[i]?'(':')');
exit();
}
if (w[x]!=-){
int che = w[p[x]];
if (w[p[x]]!=-&&((-w[x])!=w[p[x]])) return;
w[p[x]] = -w[x];
las -= w[x]?:-;
if (las >= ) dfs(x-);
las += w[x]?:-;
w[p[x]] = che;
}else{
w[x] = ;
int che = w[p[x]], chk = ;
for (int i=p[x],f=w[x]; i!=x; i=p[i])
f = -f, chk &= (w[i]==-)||(f==w[i]);
if (chk){
int bck[maxn],bct = ;
for (int i=p[x],f=w[x]; i!=x; i=p[i])
f = -f, bck[++bct] = w[i], w[i] = f;
las -= w[x]?:-;
if (las >= ) dfs(x-);
las += w[x]?:-;
for (int i=p[x],f=; i!=x; i=p[i])
w[i] = bck[f], ++f;
} w[x] = ;
che = w[p[x]];
if (w[p[x]]==-||((-w[x])==w[p[x]])){
w[p[x]] = -w[x];
las -= w[x]?:-;
if (las >= ) dfs(x-);
las += w[x]?:-;
w[p[x]] = che;
} w[x] = -;
}
}
int main()
{
memset(w, -, sizeof w);
scanf("%d",&n);
for (int i=; i<=n; i++) scanf("%d",&p[i]), ++deg[p[i]];
dfs(n);
return ;
}

END

【复杂度分析】loj#6043. 「雅礼集训 2017 Day7」蛐蛐国的修墙方案的更多相关文章

  1. loj 6043「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    loj 爆搜? 爆搜! 先分析一下,因为我们给出的是一个排列,然后让\(i\)给\(p_i\)连边,那么我们一定会得到若干个环,最后要使得所有点度数为1,也就是这些环有完备匹配,那么最后一定全是偶环. ...

  2. LOJ #6043. 「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    我可以大喊一声这就是个SB题吗? 首先讲一句如果你像神仙CXR一样精通搜索你就可以得到\(80pts\)(无Subtask)的好成绩 我们考虑挖掘一下题目的性质,首先发现这是一个置换,那么我们发现这的 ...

  3. loj6043 「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    传送门:https://loj.ac/problem/6043 [题解] 我们考虑这是个置换,所以一定形成了很多不相交的环. 对于每个环,我们只能选一段.不选.选一段.不选这样交替下去. 显然只有偶环 ...

  4. 【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)

    点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即 ...

  5. 【刷题】LOJ 6041 「雅礼集训 2017 Day7」事情的相似度

    题目描述 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的有相同的事情发 ...

  6. loj#6041. 「雅礼集训 2017 Day7」事情的相似度(SAM set启发式合并 二维数点)

    题意 题目链接 Sol 只会后缀数组+暴躁莫队套set\(n \sqrt{n} \log n\)但绝对跑不过去. 正解是SAM + set启发式合并 + 二维数点/ SAM + LCT 但是我只会第一 ...

  7. LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 LCT+SAM+线段树

    Code: #include<bits/stdc++.h> #define maxn 200003 using namespace std; void setIO(string s) { ...

  8. LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度

    我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问 ...

  9. loj#6041. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+启发式合并)

    题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就 ...

随机推荐

  1. Android 中实现分享和第三方登陆---以新浪微博为例

    第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...

  2. [RadControl] RadCartesianChart-功能強大圖表控件

    由於最近做了一些統計的圖表分析,須使用到RadCartesianChart控件,因此就在這分享給大家順便為自己學習紀錄一下. 在介紹RadCartesianChart控件前,先看一下我所使用的到的功能 ...

  3. pat1086. Tree Traversals Again (25)

    1086. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  4. Facebook TSDB论文Gorilla分析

    Facebook TSDB论文Gorilla分析 背景 TSDB时序数据库用于存储时间相关的数据,常用于监控系统的数据存储,分布式的TSDB提供了海量的数据存储能力,如InfluxDB.OpenTSD ...

  5. LayUI&前端问题汇总

    1.用JS获取地址栏参数的方法 采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) //通过data给form赋值,根据name赋给value $.fn.setForm = function ...

  6. Ubuntu 网速显示,ssh配置

    安装: sudo apt-get install python3-psutil curl git gir1.2-appindicator3-0.1git clone https://github.co ...

  7. python复习目录

    目录 一.计算机基础 二.python 2.1初始python 2.1 python基础1 2.2 python基础2 三.函数 3.1 函数进阶 3.2 函数之装饰器 3.3 递归函数之二分查找 3 ...

  8. C++ Knowledge series overloading

    What does the compiler behind our programming? Overloading in C++ Override all of overloaded functio ...

  9. Android 6.0 动态权限申请

    1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在 ...

  10. 还是要精简开发呀,VS2015太大,VS2010不想装

    公司电脑配置没有很好,所以对于我就是一个挑战. vs2015装上了,但是一打开就卡卡卡,基本没法办公. 公布能用记事本吧,太多不方便: Notepad++做辅助的局部修改还是很好用的,装上插件就智能提 ...