%%%Sparrow…
T 1
题意是给你一个图中两两点间的最小割,要你构造出这个图
看到这个题一开始想到6号讲过的”CQOI2016不同的最小割”
然后看了一眼样例,发现一定可以构造出一个满足条件的树
然后就没往下想了。。
最后发现随便搞搞就可以过很多点。。
thh && why : 最大生成树就好啦!
sparrow :贪心选最小的边,割开就好啦!
T 2
题意是在树上选k个点,求$min(\sum_{i=1}^{k-1}dis(i,i+1))$
发现就是找一个k个点连通块,其中只有一条链权值只算一遍,其他边权值算两遍,求最小值
然后想到了“摧毁树状图”,迪屁一下就好啦!
状态:$f[i][j][k]表示i号点选了一个j个点的连通块,状态为k$
分三个状态
- 0 : $一个链穿过i,它是闭合的,也就是端点不在i号点上$
- 1 :$一个链吊在i上,它可以往上延伸$
- 2 :$选的子树边权全部算两遍$
简直和摧毁树状图一模一样
然后敲了个灵车树形迪屁,GG
因为我迪屁的时候,转移全靠想象
sparrow : 把所有转移的排列枚举一下不好?
666666
发现背包时这样枚举,效率快很多!
1 | for (j = min(size[x], m); j >= 1; j --) |
比枚举背包大小不知快到哪里去!
T 3
这道题非常的劲,第一眼看上去,可持久化马拉车?
想到字符串内容有一个回文树没学过,GG?
题目数据非常大,一开始毫无头绪,上了个厕所回来,可不可以hash乱搞?
于是写了两个小时,写得要吐血都不知道在写什么。。。
下午冷静想了一下,我用的hash是这样的:
$Hash(S) = \sum_{i = 0}^{|S|-1} a[i]*P^{|S|-i}$
这个$van$意,要是字符串编号变了就非常的鬼畜
换个$Hash$算法?
考虑把字符串固定在一个轴上,轴上每个点都有一个值,$hash$就求个前缀和,岂不是很爽?
轴上点的值恰可以用$p^i$形式
对于当前$hash$串,如果往后加一个字符?不影响,新字符直接递推
如果往前加一个字符?就有点鬼畜,如果硬要用标记,怕是更鬼畜
不是要算前缀和吗?往前加一个,算成负数就可以了
不能开$long long$,为了算负数不能模,自然溢出即可
1 |
|