摘要: 虽然是模板但是却提醒我有向图一定要 试着从每个点出发 ,不仅仅是因为图不一定连通,更有可能是只从1号点出发哪也去不了的情况 c++ include include include include include using namespace std; define debug(x) cerr 阅读全文
posted @ 2018-10-14 14:18 Zolrk 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 注意 求子树时,要用子树dfs序连续这个特性,但是 不能用 如下方法(sub表示x的子树中最大的dfs序): 因为这样会无法处理叶子节点(直接返回了) 最好的办法是用size,直接算出来 细节比较多,都在注释里 需要注意的是dfs预处理时,一些特殊的写法 比如说,dfs1的时候,把一个点的父节点存在 阅读全文
posted @ 2018-10-14 14:18 Zolrk 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 看出不等式之后,通过移项套模型 大概不等式模型是这样的:$x_v include include include include using namespace std; define debug(x) cerr dist[x] + w) { dist[v] = dist[x] + w; cnt[v 阅读全文
posted @ 2018-10-14 14:17 Zolrk 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 卡特兰数$C_{2n}^n C_{2n}^{n 1}$ 还有常用的递推: c++ int main() { scanf("%d", &n); f[0] = 1, f[1] = 1; for(int i=2; i include include include using namespace std; 阅读全文
posted @ 2018-10-14 14:15 Zolrk 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题目求一种方案,使得图全连通并且所有边费用与距离之商最小 $\sum_{i∈e}cost_i$除以$\sum_{i∈e}dis_i$最小 可以考虑二分求解 可以假设这个值小于等于L时 存在 一个解,然后检查是否存在这个解,如果不存在说明L取小了 问题是为什么要假设“存在”,事实上如果假设“任意”,那 阅读全文
posted @ 2018-10-14 14:14 Zolrk 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 首先最好要会写treap(也先了解一下笛卡尔树是什么。。。) fhq treap和treap同样有一个随机分配的rnd值,用于平衡,但fhq treap不需要旋转操作来维持平衡,因为有两个神奇的操作merge和split 在两种操作之前,要明确的一点是fhq treap依靠rnd值来维护平衡,把每个 阅读全文
posted @ 2018-10-14 14:12 Zolrk 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 树上背包看作分组背包就好了,收益临时变成负数也是可以的,并且收益的数值也很大,所以不再让收益当下标,放到数组里保存,设f[x][t]表示以x为根的子树中选择t个人观看节目,电视台的最大收益(让你求什么反而不一定要存在数组里面,可能是设为数组下标再判断可行性) 这题比较特殊,一般分组背包是过不了这么大 阅读全文
posted @ 2018-10-14 09:31 Zolrk 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 建立两个差分数组,套公式就好了 c[i]表示i元素的“增量”,下面的式子左边是序列从1 ~ x的前缀和整体增加的值 $$\sum_{i=1}^x\sum_{j=1}^ic[j] = (x+1)\sum_{i=1}^xc[i] \sum_{i=1}^xi c[i] $$ c++ include inc 阅读全文
posted @ 2018-10-14 09:30 Zolrk 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 把人和床分开考虑,题目说每个人只能睡和自己直接认识的人的床,就是一种边的关系,但是并不是人与人,实际上人与人之间连边是很难处理的,但是如果把人和床连边,就是一张二分图,左右两边分别是不同的东西,然后求一下最大匹配就好了 没思路的时候换换角度,看能不能搞出什么“新东西”来 注意多组数据 不超时的情况下 阅读全文
posted @ 2018-10-14 09:06 Zolrk 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 记得及时更新sum(每次修改都更新),写成一个update函数比较好,因为很多时候会忘了% 还有懒标记是标记在这个点本身上的 然后就是左儿子和右儿子一定要看清楚。。。 一个是n 2 ,一个是 n 2 + 1 ,涉及到这部分的代码一定要专注 乘法标记优先级大于加法,并且对加法标记也有作用 若要增加加法 阅读全文
posted @ 2018-10-14 08:22 Zolrk 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 这题想得脑阔疼。。。我只想到可以选一个点,或者不选这个点选其左右两个点的和 先来特殊情况 ,k=1, 然后k=2 可以发现由1到2的过程中,可以是一个本来被选的点,替换为他左右两边的点,收益 增加了 a[pos+1] + a[pos 1] a[pos] 这个题是一个个选,直到选了k个,有种递推的感觉 阅读全文
posted @ 2018-10-14 08:22 Zolrk 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 开n棵平衡树,慢慢合并成一个,用并查集处理连通关系,平衡树处理第k大就好了 因为重要度是不会有重复的,而且是从1到n的,可以开一个数组,表示重要度为k所对应的编号 如何合并? 要善于把一个新问题转化为一个已解决过的问题 我甚至想自己搞出一个新算法处理连通关系,但是用并查集不就好了吗 思维定势:一个题 阅读全文
posted @ 2018-10-14 08:21 Zolrk 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 是真的染色,把不同预约看做不同颜色,现在问题就是一个区间内不同颜色的数量,这个分块线段树都能做吧(不考虑复杂度用莫队也行) 注意,线段树的最大边界必须是定值,不能随输入改变(一开始懒得离线动态更新右端点然后节点的编号就串了) 注意数组大小,因为same和tag数组都是针对线段树节点设置的,所以其数组 阅读全文
posted @ 2018-10-14 08:20 Zolrk 阅读(102) 评论(0) 推荐(0) 编辑