03 2019 档案
摘要:这题挺恶心的。 首先一颗树的时候点分加卷积统计答案,注意合并子树时按深度从小到大合并,否则复杂度就爆了。 我偷懒用size从小到大合并,复杂度应该还是两个log. 然后考虑万恶的环。 先随便删掉环上一条边,按照树统计一下答案。 然后考虑 必须经过环上该条边的答案但又不经过整个环的答案。 考虑再钦定一
阅读全文
摘要:```c++ include using namespace std; string Get(){ return string(200000000,'a'); } int main(){ int t=clock(); const string &s0=Get(); cerr
阅读全文
摘要:别的也不想多说,就讲考试吧。 进场前状态应该还是比较好的,人也没有昏昏欲睡。 进考场之后先打了数据生成器。 又打了配置文件。(顺序好像反了) 然后终于公布了解压密码。 看题,麻将, 果然有麻将。 九条可怜, 又是九条可怜。 T1看完没有什么思路。 看T2,一脸不可做的样子。 看T3,哇,这个50分好
阅读全文
摘要:好久以前开的坑. 到今天才填上. 首先考虑队第一颗树边分,然后分成两个集合$L,R$,在第二棵树上建出虚树,在每个路径$lca$处统计答案,维护点集的直径只有正权很好维护. c++ include using namespace std; typedef long long ll; typedef
阅读全文
摘要:这题很明显是lct,我们只要可以维护黑色点深度和即可。 但是lct维护子树信息好难写啊。 首先边权比较难处理,所以偷懒加虚点表示边。 然后考虑维护子树距离和,需要维护splay上的边权和。 为了可以reverse,还必须维护一个反的距离和。 虚子树的答案更新在access和link连虚边的时候。 好
阅读全文
摘要:超级结论题。。。 首先建出原图的补图,再考虑缩点。 缩完点后是一个有向无环图。 这个图的每个点代表一个强联通分量。 考虑一个大小大于$1$的强联通分量中的一个点$i$,那么$i$永远不可能开枪。 因为$i$开枪需要假设自己的狗没病,然后枚举自己看不到的狗的状态,然而由于有他的转移依赖的状态 依赖他,
阅读全文
摘要:这题做法真多。 做法一:直接圆上撒点,跑最小圆覆盖$O(n B)$,其中B为撒点数。 做法二:先对所有圆心跑最小圆覆盖,然后将最小圆的圆心与输入圆的靠外的交点作为点,跑最小圆覆盖,多迭代几次。复杂度玄学。 做法三:观察到x,y都是可以三分的,三分套三分,$O(n log^2 C)$,C为值域。可能可
阅读全文
摘要:手写了一个动态申请内存的数组,更准确的说是一个本来应该是块链,最后由于太耗时间了变成数组的东西。 由于太懒了,编译需要用c++11或以上。 两个参数分别是元素类型和块大小S。申请内存以块为单位,很明显如果块大小是$O(n)$那么就是数组,如果块大小是$O(1)$那么就是链表。 各种操作的复杂度跟数组
阅读全文
摘要:这题并不难想,但是很难写。 首先先转化为开区间,然后一个就是挂左链,一个是挂右链。 然后变成了一个点与左链上挂的点的距离的问题。 然后就分讨吧! 此处省略一万字。 写完之后,编译了一下程序,电脑死机了。 然后发现自己CMLE了。(CMLE,即编译器内存超限) 原因是在c++11标准下struct内二
阅读全文
摘要:https://codeforces.com/problemset/problem/1129/E 这题就是一个主要的想法是变成有根树,然后自下而上确定点,每次二分未确定父亲的集合找出父亲。 已写。 https://codeforces.com/problemset/problem/1129/D 考虑
阅读全文
摘要:问题是你有p个数,他们的和是n 现在输入q,让你输出q的$p_i$次方。 如果询问次数很多,p比较小,值域比较大,怎么快速做。 法一 直接快速幂 O(p log C) 法二 考虑将这p个数排序,然后差分,然后对差分数组排序,以此类推。 不断排序差分。 这样加上一定长度的预处理。 假设排序是O(p)的
阅读全文
摘要:这题思路很清楚。 应该就是先把b数组搞出来,然后再根据b算c数组的中位数。 首先先把b搞出来,如果用倍增,那么预处理$O(n log n log C)$,算出b复杂度为$O(n log n log C log C)$,稍微用一下gcd的trick就可以变成预处理$O(n (log n+log C))
阅读全文