摘要:
点分治,对于每个分治中心,考虑求出经过它的符合长度条件的链的最大权值和。 从分治中心dfs下去取出所有链,为了防止两条链属于同一个子树,我们一个子树一个子树地处理。 用s1[i]记录目前分治中心伸下去的链中长度为i的链的最大权值,s2[i]记录新子树中的链的最大权值。 分数规划,考虑合并,枚举长度, 阅读全文
摘要:
支配树目前只见到这一个应用,那就不独分一类,直接作为拓扑排序题好了。 每个点向所有食物连边,定义fa[x]为x的支配点,即离x最近的点,满足若fa[x]灭绝,则x也要灭绝。 这样,将fa[x]向x连边,则建出的新图是一棵树,这就是支配树(不是严谨的支配树,被出题人称为灭绝树) 建树流程是,将拓扑序反 阅读全文
摘要:
起床困难综合症那题,只要从高往低贪心,每次暴力跑一边看这一位输入0和1分别得到什么结果即可。 放到序列上且带修改,只要对每位维护一个线段树,每个节点分别记录0和1从左往右和从右往左走完这段区间后变成的数即可。 放到树上,只要树链剖分即可。但这里有一个很大的常数k,实际上我们只需要一个数就可以记录64 阅读全文
摘要:
首先merge就是先delete两次再insert,Max就是整个区间的最大值减最小值,Min就是区间中所有相邻两数差的最小值。 Splay支持区间最大值,区间最小值,区间相邻差最小值即可。 阅读全文
摘要:
越来越写不来简单题了。 就是求a[i]到b[i]之间的位置有多少个数是第一次出现且目前仅出现了一次。树状数组,每次给第一次出现的数的位置+1,若到了第二次出现的位置,则将第一次出现的位置-1即可。 阅读全文
摘要:
对每行每列分别建一个点,问题转为选n+m条边,并给每条边选一个点覆盖,使每个点都被覆盖。也就是最小生成环套树森林。 用和Kruskal一样的方法,将边从小到大排序,若一条边被选入后连通块仍然是一个环套树(即边数不多于点数)则连上。证明大致同Kruskal。 阅读全文
摘要:
莫队,cnt数组记录每个数的个数,bitset b1[i]记录数i是否出现过,b2[i]记录数M-i是否出现过。 减法:((b1>>x)&b1).any()。 加法:(((b2>>(M-x))&b1).any()。 乘法:若存在一定有一个数<=sqrt(1e5),枚举即可。 复杂度:$O(n\sqr 阅读全文
摘要:
首先冷静一下看清问题的本质,是将整个数列分成两个递增子序列。 那么由Dilworth定理得,无解当且仅当数列的最长下降子序列的长度>2,先特判掉。 然后就有一些比较厉害的做法:http://www.cnblogs.com/Gloid/p/10025835.html 一种比较直观的做法是,将每对逆序对 阅读全文
摘要:
第一种方法是决策单调性优化DP。 决策单调性是指,设i>j,若在某个位置x(x>i)上,决策i比决策j优,那么在x以后的位置上i都一定比j优。 根号函数是一个典型的具有决策单调性的函数,由于根号函数斜率递减,所以i决策的贡献的增长速度必定比j快。 于是使用基础的决策单调性优化即可。 注意两个问题,一 阅读全文
摘要:
比较神的一道题,正解比较难以理解。 首先不难得出一个(nm)^3的算法,对所有串建AC自动机,将在每个点停止的概率作为未知数做高斯消元即可。 可以证明,AC自动机上所有不是模式串终止节点的点可以看成一个点,不妨合并为同一个点(n+1号点)。 对于一个模式串,它肯定是从n+1号点走了m步后到达的,概率 阅读全文