随笔分类 -  2015

摘要:题面 需要动态维护一个点集的极小联通子图边权和。可以发现,将点集 \(\{a_i\}\) 中的点按照 dfs 序从小到大排序之后,\(dist(a_1,a_2)+dist(a_2,a_3)+\ldots+dist(a_{k-1},a_k)+dist(a_k,a_1)\) 恰好等于我们要维护的那个边权 阅读全文
posted @ 2022-05-20 12:08 cunzai_zsy0531 阅读(32) 评论(0) 推荐(0)
摘要:题面 本来就是个裸的KMP,但是这个题是有删除的,所以可以维护一个栈,每次的 \(j\) 都继承栈顶元素的 \(j\),然后如果找到了一个匹配,就直接弹栈即可。因为只会进栈 \(O(n)\) 次,所以总复杂度也是 \(O(n)\) 的。这个题算是栈的妙用了。 点击查看代码 #include<iost 阅读全文
posted @ 2022-05-19 16:22 cunzai_zsy0531 阅读(63) 评论(0) 推荐(0)
摘要:题面 把所有叶子拎起来当根,合并成一棵trie之后建广义 SAM(我直接每个叶子直接跑的,每次 \(lastpos\) 重置,也可过)。 点击查看代码 const int N=1e5+13,M=2e6+13; int n,m,nxt[M<<1],len[M<<1],ptot=1; std::vect 阅读全文
posted @ 2022-05-18 21:25 cunzai_zsy0531 阅读(36) 评论(0) 推荐(0)
摘要:题面 板子。注意模数不是质数的 \(\det\): inline int det(int n){ int res=1;bool flag=0; for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j){ while(a[i][i]){ int tmp=a[j][i] 阅读全文
posted @ 2022-05-18 20:31 cunzai_zsy0531 阅读(21) 评论(0) 推荐(0)
摘要:题面 设 \(sum_u\) 为 \(u\) 子树内 \(d\) 的和,\(sum_d\) 和 \(sum_ch\) 意义是常见点分树容斥,记录子树内 \(d\times dist\) 的和。 首先注意一个性质:假设当前答案为 \(u\),那么如果 \(u\) 的某个儿子 \(v\) 的答案更优,那 阅读全文
posted @ 2022-05-11 18:56 cunzai_zsy0531 阅读(45) 评论(0) 推荐(0)
摘要:题面 这个题没有修改操作,所以不需要开线段树。跟平常的动态点分治做法一样,每个点开两个 vector 按照 \(x_i\) 排序存储到这个点和到这个点在点分树父亲的距离。每次找一个点的时候,暴力跳点分树父亲,直接在 vector 上二分查找满足 \([l,r]\) 这个区间的点和距离,直接计算即可。 阅读全文
posted @ 2022-05-11 18:52 cunzai_zsy0531 阅读(61) 评论(0) 推荐(0)