tg 87 solution
T1
不可以总司令
你发现这个东西实在没有办法维护
考虑乱搞
于是你想到君の星战
于是你考虑哈希
但是你的哈希和别人不一样
你考虑把一个路径上的所有数写成这个形式
\(sum=\sum\limits^{len}_ {i=1} cnt_{i}\cdot base^{i}\)
其中\(base\)就是一个进制,然后\(cnt_i\)就是\(i\)在路径中出现的次数
相等的话就是\(sum=\sum\limits^{len}_ {i=1} base^{i}\)
然后你考虑线段树区间加区间求和维护这个东西
写个双模就结束了......
T2
嘿嘿没想到吧是原题!
考虑把每个边存在的时间做线段树分治
线段树分治时用并查集维护一下所有连通块的大小即可,
并查集需要支持撤销,因此只能支持按秩合并。
T3
三维偏序
二维偏序
T4
思考一下妹子操作的策略,
我们先把\(t\)号节点提根,
\(s\)到\(t\)的路径就是一条到根的链,
qjd 必然是向上走若干步,
然后妹子在他走的同时删掉一些比较优的子树节点不让他进入,
然后 qjd 找到一个自己能进入的最优的子树并钻进去,
此时妹子可以每次删掉 qjd 所在节点的最优的那个儿子,
因此 qjd 此时只能不断走次优的儿子。
一番操作后,qjd 必然会被堵在某个节点上(因为不能走有标记的边),
此时妹子就慢慢把他到根路径上的所有分岔口全部删掉,
然后清理掉 qjd 到根的边上所有的标记即可。
于是我们可以二分答案,
从\(s\)向\(t\)一步步跳,
每次看当前节点\(i\)的所有不在\(s\)到\(t\)路径上的子树,
如果这个子树的代价加上在\(i\)之前被删掉的子树数量\(\geq mid\),
那么这个子树也必须被删掉。
如果某个时刻必须要被删掉的子树数量比 qjd 跳的步数还大,那么就不行。
这里子树的代价包括找个 qjd 能进入的最优节点,删掉所有分岔口以及清理子树到根上所有边的标记的代价之和。