csp-s模拟51

T1:
树剖,分情况讨论当前root与操作节点的位置关系
1.u,v的lca -> lca(u,v),lca(u,root),lca(v,root)中dep最大的点
2.(tree_u)的权值和 -> 若u不在1-root的链上,(siz_u)。否则,v是u到root链上u下方的第一个点,(siz_1-siz_v)
特别的,root的ans为(siz_1)

T2:
考虑实际含义:
每个格子有一个权值,每一列格子的权值都是相同的。
从一个起点开始,每次可以向上走一格或者向左上角走一格,直到走到最上面一行为止。
你需要最小化经过的格子的总权值。
首先最优路径显然是先斜着走到较小的那一列,然后再一直向上走
所以我们设(g_y(i,x))表示考虑到第y列,从(x,y)开始斜着走到i列再顶到头的代价
(t_y(x))表示表示考虑到第y列,从(x,y)开始走到顶的最小代价
(g_y(i,x) = sum_{i,y} + (x-(y-i+1))*a[i])
(t_y(x)=min_{i=1}^y{g_y(i,x)})
发现当y一定时,g函数是一个关于x的一次函数,而t函数则是一个由g拼成的凸包
而当y增大时,g函数只有截距会变化
所以可以将询问离线下来,从大到小枚举y,每次插入一个一次函数,维护凸包即可。

T3:
生成函数+FFT 咕了

原文地址:https://www.cnblogs.com/Gkeng/p/11791081.html