随笔分类 -  题解

上一页 1 2 3 4 5 6 ··· 18 下一页
摘要:传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x) 阅读全文
posted @ 2021-11-02 21:33 尹昱钦 阅读(52) 评论(0) 推荐(0)
摘要:点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 \(O(n^2)\) 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优 阅读全文
posted @ 2021-11-01 17:02 尹昱钦 阅读(58) 评论(0) 推荐(0)
摘要:传送门 传送门 判断节点u的子树是否是对称二叉树的方法: 判断hash1[l[u]]是否等于hash2[r[u]]。 其中hash1中存的是按照根左右的顺序的哈希值,hash2存的是按照根右左顺序的哈希值。 当两个hash值相等时,即为对称二叉树。 单哈希和双哈希貌似都不太稳定,而用自然溢出即可AC 阅读全文
posted @ 2021-10-31 10:50 尹昱钦 阅读(275) 评论(0) 推荐(0)
摘要:传送门 解题思路 关键点:根据线性基的性质,若序列数字个数大于等于30,则一定有异或值为0的两个集合。 所以对于每个询问,先判断两个点之间的路径长度是否大于等于30,若小于30,直接暴力找,线性基判断,否则直接判断。 对于每次修改,可以用线段树维护树剖。 AC代码 #include<iostream 阅读全文
posted @ 2021-10-29 08:10 尹昱钦 阅读(75) 评论(0) 推荐(1)
摘要:传送门 解题思路 首先背过线性基的一个性质吧(因为我不会证明): 线性基里的每一个异或值出现的次数相等,为 \(2^{n-k}\) 。 然后这题就变成统计某个数是第几大异或值了。 分类讨论在归纳一下: 假设询问的数字是q。当处理到第i位且q的这一位为1,且线性基这一位有数,则 当前面位异或起来得到的 阅读全文
posted @ 2021-10-28 17:53 尹昱钦 阅读(169) 评论(0) 推荐(1)
摘要:传送门 前置知识: Nim博弈 线性基 解题思路 注意两人各进行一次操作,所以目的就是要使对方不管怎么拿,都不能到达一个异或和为0的状态。 所以相当于第一次操作结束后,必须保证任意元素异或值不为0。 这就很典型的线性基了,并且和[BJWC2011]元素这个题完全一样,贪心取即可。 AC代码 #inc 阅读全文
posted @ 2021-10-28 13:33 尹昱钦 阅读(36) 评论(0) 推荐(1)
摘要:传送门 解题思路 非常清新的一道题。 先假设选择了一条1->n的主路径,然后在这条路径上向外拓展。 发现只有环对答案有影响,因为非环的边一定会走两次,异或和为0。 因为图是联通的,所以可以经过任意环,所以可以把所有的环的异或值扔到线性基里。 然后再考虑选择哪一条路径,我们发现若1->n有多条路径,其 阅读全文
posted @ 2021-10-28 11:47 尹昱钦 阅读(44) 评论(0) 推荐(1)
摘要:传送门 解题思路 贪心策略:按照价值从大到小排序,能选就选。 用线性基维护是否发生冲突。 正确性:异或和为0的几个数中去掉价值最低的异或和一定不为0。 AC代码 #include<iostream> #include<algorithm> #include<cmath> #include<cstdi 阅读全文
posted @ 2021-10-27 21:54 尹昱钦 阅读(34) 评论(0) 推荐(0)
摘要:线性基 推荐Menci博客的前半部分:https://oi.men.ci/linear-basis-notes/ 非常学术的讲解了线性基。 然后对于如何构造线性基,我一般使用以下方法: 对于每一个加进来的数,从高位向低位扫,若某一位是1,则看线性基的a[i]是否有值,若有,则这个数^=a[i],否则 阅读全文
posted @ 2021-10-26 22:58 尹昱钦 阅读(83) 评论(0) 推荐(0)
摘要:传送门 解题思路 关键:根据定义,线性基是线性无关的,2的线性基内的元素数量次幂即为可能的异或数量。 于是就成了板子题了。 AC代码 #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cs 阅读全文
posted @ 2021-10-26 22:42 尹昱钦 阅读(32) 评论(0) 推荐(0)
摘要:传送门 解题思路 简要来说就是求每一个基环树的直径的和。 想起来很好想,就是把环上每个节点挂的子树的深度的信息挂到环上的节点上,然后断环为链,找一段最大的区间使得dep[a]+dep[b]+dis[a,b] 最大,dis[a,b] 又可以用前缀和预处理成 dis[b]-dis[a],于是式子变成了d 阅读全文
posted @ 2021-10-26 08:41 尹昱钦 阅读(65) 评论(0) 推荐(0)
摘要:传送门 解题思路 和上一题很像,不过这是个基环森林。 还是一样要注意是否是二元环(可以通过删边和反向边来处理)。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath 阅读全文
posted @ 2021-10-25 19:45 尹昱钦 阅读(49) 评论(0) 推荐(0)
摘要:传送门 解题思路 先找到基环树上的环,然后断掉任意一条环上的边,分别以两个端点做树形dp(没有上司的舞会),最后答案就是max(dp1[s][0],dp2[t][0])。 其中dp1[s][0]为以s为根节点不选s的答案,dp2[t][0]表示以t为根节点不选t时的答案。 注意断边不能只看点,因为有 阅读全文
posted @ 2021-10-25 18:57 尹昱钦 阅读(43) 评论(0) 推荐(0)
摘要:传送门 基环树 定义: n个节点n条边的连通图。 性质: 很显然有且仅有一个环。 如何找环: dfs,每次读到一个节点入栈(类似Tarjan) 拓扑排序:最后剩下的度数不为零的点一定就在环上 题目通常解法: 把环看做一个整个树的根,然后把子树的信息挂到环的每一个点上,问题变成了环上操作,再根据题目需 阅读全文
posted @ 2021-10-25 18:24 尹昱钦 阅读(44) 评论(0) 推荐(0)
摘要:传送门 解题思路 求2-sat合法的方案数。 做法: 先基操判断有无解,并求出一组解。 然后考虑两个集合的人能否过去。 我们发现只有三种情况:A到B一个人,B到A一个人,AB交换一个人。 所以就 \(O(N^2)\) 判断AB集合中的人是否符合条件,最后方案数即为(A到B符合的人数+1)*(B到A符 阅读全文
posted @ 2021-10-19 18:54 尹昱钦 阅读(694) 评论(0) 推荐(1)
摘要:传送门 解题思路 和板子几乎一样。 而且不用输出方案。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<q 阅读全文
posted @ 2021-10-19 14:38 尹昱钦 阅读(31) 评论(0) 推荐(0)
摘要:传送门 解题思路 思想:将问题转化为图论问题。 因为一个点只有两个状态,所以每个点可以拆成 i 和 i+n 两个点,u 连向 v 表示选择 u 就必须选择 v。 根据条件建图(注意一定要建对应的反向边(例如建立 u->v+n,就必须再连 v->u+n))后,跑一遍Tarjan求强连通分量。若发现存在 阅读全文
posted @ 2021-10-19 13:03 尹昱钦 阅读(56) 评论(0) 推荐(0)
摘要:传送门 解题思路 考虑尺取法。 将所有区间按照长度从小到大排序,然后tow-pointers在保证区间最大值>=m的情况下不断维护区间+1/-1。 用线段树维护。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include< 阅读全文
posted @ 2021-10-18 19:23 尹昱钦 阅读(50) 评论(0) 推荐(0)
摘要:总结 场上做了ABCD1E,但其实题目都挺简单的,还是自己太菜了,唉。 %%%xmz神仙,AK了。 A. Elections 求使一个数变成三个数中最大的数最小加几。 做法很多,但是注意不能直接求max然后减,要判断。 B. Make it Divisible by 25 因为25是100的因数,所 阅读全文
posted @ 2021-10-18 16:36 尹昱钦 阅读(123) 评论(0) 推荐(0)
摘要:传送门 解题思路 和洛谷 P3674 很像。首先对于质数输出其本身。然后对于合数,根据哥德巴赫猜想,偶数一定可以由两个质数相加得到,而奇数则可以由两个或者三个质数得到。 但是三个数的和不好找,于是可以把奇数-1得到偶数进行求解。 然后就可以预处理1~1e7的质数,扔到bitset里,每次询问相当于询 阅读全文
posted @ 2021-10-16 08:57 尹昱钦 阅读(68) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 ··· 18 下一页