3.28 省选模拟赛 染色 LCT+线段树】的更多相关文章

发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. 但是对于这道题来说 暴力还是有价值的. 考虑20分 每次暴力dfs. 考虑对于树是随机生成的 那么期望高度为logn 我们发现每次修改只用修改到1 也就是说每次暴力修改颜色的话只需要logn的时间复杂度. 考虑如何动态维护子树内的值 考虑修改一个点的颜色 子树内之前和它颜色一样的点 显然子树内部整体…
容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的做法. 二分为重 发现变成了dp使得总a值尽可能小的问题. 方程为 f[i]=min(f[j]+max(j+1~i)a[k]); 这个问题容易使用线段树优化dp来解决. 单调栈维护决策区间修改即可.不过被卡常了 只有90points const int MAXN=100010; ll n,m,top…
LINK:字符串 看起来很难做 考虑一种暴力 建立SAM后每次查询暴力扫儿子. 期望得分10分.实际得分10分. 另外一种发现每次扫儿子过于暴力 可以每次儿子向上做贡献 每次都暴力向上跳. 期望得分10分.实际得分100分. 由此可以发现玄学的暴力非常的强大 可能这就是所谓的暴力出奇迹吧. 考虑离线:这样就可以把SAM给建出来了 进一步的 每次询问是查询子树和. 每次修改是单点修改 可以利用线段树维护dfs序就做完了. 不过其中存在细节 分裂的节点是影响答案的统计的. 怎么处理分裂的节点?注意到…
LINK:Decompose 看起来很难 实际上也很难 考验选手的dp 树链剖分 矩阵乘法的能力. 容易列出dp方程 暴力dp 期望得分28. 对于链的情况 容易发现dp方程可以转矩阵乘法 然后利用线段树维护矩阵即可. 这个矩阵很容易列出这里不再赘述. 对于100分 容易想到动态dp模型 LCT写动态dp是万万不能的. 而且这道题的dp方程和其他儿子也有些关系. 考虑树链剖分 然后分别计算轻儿子和重儿子的贡献. 让重儿子利用矩阵来进行转移 轻儿子当做常数. 这样每次修改的时候 修改的节点最多只有…
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还有一种做法就是对于作用域一整个区间的标记,就将其放置在此区间节点,查询时再结算其贡献,但无论怎样我们都要保证我们查询到的区间信息的真实性完整性,这就意味着我们接触一个区间若要了解到他的全部有用信息,并不用进入其下层区间(以上两种标记方式往往再结合出现时有巧妙的用处).于是我们必须高效地合并子区间的信…
染色 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output Sample Input 13 0 1 0 2 1 11 1 10 1 9 9 12 2 5 5 8 2 4 2 3 4 6 4 7 7 q 0 O 4 q 6 q 2 O 9 q 9 q 2 Sample Output 2.0000000000 1.0000000000 0.8571428571 0.5000000000 1.8571428571 HINT…
容易写出nQ的暴力 由于数据是期望的时间 所以直接dfs可以跑的很快 可以拿到70分. 当然 可以进一步优化暴力 使用换根dp 然后可以将暴力优化到n^2. const int MAXN=300010; int n,Q,T,len,maxx; int lin[MAXN],d[MAXN],ver[MAXN<<1],nex[MAXN<<1]; inline void add(int x,int y) { ver[++len]=y; nex[len]=lin[x]; lin[x]=len…
容易想到 这个环一定是简单环. 考虑如果是复杂环 那么显然对于其中的第一个简单环来说 要么其权值为负 如果为正没必要走一圈 走一部分即可. 对于前者 显然可以找到更小的 对于第二部分是递归定义的. 综上 这个环是一个简单环. 那么最多有n个点. 考虑枚举起点 然后 设f[i][j][k]表示从i到j经过k条边的最短路. 容易发现最终的答案为 f[i][i][w]<0 w. 不过这样做是n^4的. 考虑优化 容易想到二分 而上述状态其实本质上是一个矩阵乘法. 那么我们可以矩阵乘法在n^3logn的…
第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右下角的答案. 那么我们把询问矩阵给上下翻转 左右翻转.设初始矩阵为a 询问矩阵为b 且询问矩阵大小为x,y. 那么显然有 \(f_{i,j}=\sum_{l=1}^x\sum_{r=1}^y[b_{l,r}==a_{i-l+1,j-r+1}]\) 这是一个二维卷积的形式 还是考虑转换成一维卷积的形式…
LINK:duoxiao OJ LCA on Tree 题目: 一道树链剖分+树状数组的神题. (直接nQ的暴力有50. 其实对于树随机的时候不难想到一个算法 对于x的修改 暴力修改到根. 对于儿子的答案维护 不难发现维护几个变量值即可 这样做每次是Qh的复杂度 在树随机时为logn 考虑正解: 难点还是在于修改 先把起始的答案求出来. 对于修改x x的某个孙子w答案的变化显然是 (sz[w]+1)v. 对于x的某个儿子 s来说 答案的变化为 (sz[s]+1)v+\(v\cdot \sum_{…