摘要:
解:这又是什么神仙毒瘤题...... 我直接把后面那个phi用phi * I = id反演一波,得到个式子,然后推不动了...... 实际上第一步我就大错特错了。考虑到n很小,我们有 然后计算S,我们根据欧拉函数的性质有: 于是只考虑n sqr free的情况。 到这里有两种解法,一种是暴力递归。 阅读全文
摘要:
解:显然f那个式子可以反演一波,然后再推一波,最后出来了这个...... 其中M是莫比乌斯函数的前缀和。虽然看起来能算...感觉很毒瘤,复杂度也不会。 正解:杜教筛的套路是对一个卷函数求前缀和,然后拆开。 于是我们直接对(i2 - 3i + 2)求前缀和,之后就是一个很普通的杜教筛式子了...... 阅读全文
摘要:
参考资料。 先讲几个水一点的式子热身。 求1~n每个数的约数和。 先把约数和函数拆开,然后把枚举的d提前,考虑每个d被枚举了多少次。显然d的倍数会枚举到d,所以每个d就被枚举了1~n中d的倍数次,也就是(n/d)次。 后面那个式子可以对(n/d)分块,乘上一段区间的和。复杂度sqrt(n) 上式的简 阅读全文
摘要:
大概就是把点分树建出来,维护每个点的信息和全局信息。 修改的时候考虑一个点对它点分树祖先的影响。 树上与距离有关的问题,考虑动态点分治。 例题: 洛谷P2056 捉迷藏 带修树上最远黑色点对。 这道题难点根本不在动态点分治,完全在于堆(们)好吧!!!我被这三种堆虐的死去活来,然后又T飞...换了O( 阅读全文
摘要:
专业求解强连通分量边双连通分量点双连通分量缩点割点割边30年! “你是割点” “那你就是桥” “是的,我是一条归桥,想不到吧” 首先是强连通分量缩点的tarjan。奉上代码。 1 #include <cstdio> 2 #include <cstring> 3 #include <stack> 4 阅读全文
摘要:
一般是求网格图路径个数/最值的。 维护轮廓线连通性。按照格子转移。 参考资料。题单。 注意跨行时的转移。 例题:bzoj1814 注意!结尾不一定是(n, m),此时要保证没有插头才能加入答案。 1 #include <cstdio> 2 #include <algorithm> 3 #includ 阅读全文
摘要:
然而就是状压DP。 具体来说,n个点中有k个关键点,选择一些边把它们连通。求最小边权和。 f[i][s]表示点i与s关键点连通时的最小代价,注意i可以不是关键点。 转移有两种,第一种是i不变,s变。枚举s的子集和补集即可。 第二种是s不变,i变。把第一种转移中的所有非INF的i加入队列跑SPFA。每 阅读全文
摘要:
以时间为下标建线段树,则持续[L, R]时间的一个事物就能被表示成logn段区间。 这样就避免删除只有插入。 例题: bzoj4644 经典傻逼题 每个点的点权为与它相连的边的权值异或和。求最大权点集即可。 线段树分治 + 线性基 + bitset。 1 #include <cstdio> 2 #i 阅读全文
摘要:
可并堆有一种黑科技是用线段树合并实现,还能可持久化,时间复杂度nlogn。 这里介绍左偏树。 d值表示走右边到叶子的距离。满足d[r] <= d[l] 写法上用rt维护根节点,类似线段树。 不要把两个merge写混淆了! 放一个模板。 namespace lt { int ls[N], rs[N], 阅读全文
摘要:
每次取两个点,把较劣的一方移动。 我的写法: 有个经典题是[SCOI2010]传送带 阅读全文