传送门:https://loj.ac/problem/6043 [题解] 我们考虑这是个置换,所以一定形成了很多不相交的环. 对于每个环,我们只能选一段.不选.选一段.不选这样交替下去. 显然只有偶环是有解的,所以只考虑偶环. 每个偶环有2种方案(第一个选,第一个不选),直接枚举是O(2^(n/2))的,复杂度接受不了. 我们发现,2元环的左括号一定放在前面更优(更容易形成括号序列),所以贪心放,剩下的最小是4元环,枚举即可,所以复杂度是O(2^(n/4)). 写个dfs然后发现常数太大...(…
点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即对于每一个没有确定的位置\(x\),无非有两种情况: 选左括号.前提是\(p_x\)没被选过或者\(p_x\)为右括号,然后标记第\(p_x\)位为右括号. 选右括号.我们可以开一个变量\(v\)来记录左括号个数\(-\)有括号个数,则选右括号的前提是\(v>0\).(因为要是一个合法的括号序列)…
我可以大喊一声这就是个SB题吗? 首先讲一句如果你像神仙CXR一样精通搜索你就可以得到\(80pts\)(无Subtask)的好成绩 我们考虑挖掘一下题目的性质,首先发现这是一个置换,那么我们发现这的显然会成环 然后我们发现那个度数的性质其实就是告诉你环上的点必须左右括号相间 换而言之一个环其实只有两种状态,那么我们对于每一个环进行搜索的复杂度显然就是\(O(2^{\frac{n}{2}}n)\) 那么考虑\(n=100\)要怎么卡过去.我们发现一个长度为\(2\)的环显然必须令前面的为左括号,…
感觉有点假 题目大意 数据范围:$n<=100$ 题目分析 由于题目给出的是 置换,所以相当于只需枚举每个环的两个状态. 主要是复杂度分析这里: 一元环:不存在 二元环:特判保平安 三元环:不存在 四元环:复杂度$O(2^{25})$,但是特判一下顺序就可以秒下来了 六元环:复杂度$O(2^{17})$至此及以后的复杂度都是可以接受的了 不知道为什么倒着搜就会更快? #include<bits/stdc++.h> ; int n,las,p[maxn],w[maxn],deg[maxn]…
loj 爆搜? 爆搜! 先分析一下,因为我们给出的是一个排列,然后让\(i\)给\(p_i\)连边,那么我们一定会得到若干个环,最后要使得所有点度数为1,也就是这些环有完备匹配,那么最后一定全是偶环.对于一个环,我们选点一定是隔一个选一个,所以每个环只有\(2\)种选法.如果我们先考虑长度为\(2\)的环,这种环选编号小的点显然更优,因为他要的是括号序列,左括号在越前面越好;剩下的环一定长度\(\ge 4\),那么这种环个数不超过\(\frac{100}{4}=25\)个,枚举每种环的选择情况即…
「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点的\(lca\)的\(maxlen\). 所以现在问题就变成了一个树上问题:给定一棵树,每个点有一个权值\((mxlen)\),询问编号在一段区间内的点两两之间\(lca\)权值的最大值. 方法很多,这里用的\(dsu\ on\ tree\).对于每个点\(v\),我们计算其作为\(lca\)的贡献…
题面 来源 「 雅 礼 集 训 2017 D a y 7 」 跳 蚤 王 国 的 宰 相   传 统 2000   m s 1024   M i B {\tt「雅礼集训 2017 Day7」跳蚤王国的宰相}\\ \,_{传统~~~~~2000\,{\tt ms}~~~1024\,{\tt MiB}} 「雅礼集训2017Day7」跳蚤王国的宰相传统     2000ms   1024MiB​ 题目描述 跳蚤王国爆发了一场动乱,国王在镇压动乱的同时,需要在跳蚤国地方钦定一个人来做宰相. 由于当时形势…
Description 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的有相同的事情发生.比如,有两个人同时在世纪之交 11 年的时候上台,同样喜欢与洋人谈笑风生,同样提出了以「三」字开头的理论. 你发现,一件事情可以看成是这个 01 串的一个前缀,这个前缀最右边的位置就是这个事情的结束时间. 两件事情的相似度可以看成,这两个前缀的最长公共后缀长度. 现在你很好奇,在一…
题目描述 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的有相同的事情发生.比如,有两个人同时在世纪之交 11 年的时候上台,同样喜欢与洋人谈笑风生,同样提出了以「三」字开头的理论. 你发现,一件事情可以看成是这个 01 串的一个前缀,这个前缀最右边的位置就是这个事情的结束时间. 两件事情的相似度可以看成,这两个前缀的最长公共后缀长度. 现在你很好奇,在一段区间内结束的…
我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问题的话请出万能算法--LCT(这里准确的说应该是实链剖分),我们只需要不停地access就可以找到LCA了 然后怎么统计最后的答案,区间询问用莫队?这里的两个信息(最大值,边的虚实)显然都不能撤销 我们直接大力离线,从左往右把点一个个扔到LCT上,然后对于每个点开一个树状数组维护后缀最大值,由于这里…