题意
给$n$个齿轮,每个齿轮之间有两种连接方式,角速度相同,或线速度相同。构成森林(多个树)
有$q$个询问,一个修改半径,一个给定一个齿轮角速度求所连齿轮中最大角速度。
首先我们可以求出所有齿轮对于他的根的相对角速度,由于是乘法并且最后输出对数。我们可以对所以取$log2$,然后相对角速度的计算就成乘法变成除法。
然后看第一个角速度连接方式。一条角边链上的齿轮,修改半径对其链无法造成影响。
再看看第二个线速度连接方式。一条线边链上的齿轮,因为$w=\frac{w_{根}*r_{根}}{r_{自己}}$ 会对自己的角速度产生影响。
- 对在角边链上的点(父亲是角边的点),自己的角速度不变,线速度发生改变,影响了他的线边。
- 对在线边链上的点(父亲是线边的点),自己的角速度发生,线速度不变,影响了自己和他的角边。
此时用$dfs$序记录下他的儿子角边,儿子线边就好了,用线段树修改。
注意点:
- 他是一个森林(不是一棵树,而是多棵树,查询需要并查集判断在那棵树)
- 根结点因为角速度是定的,就相当于连上一个角边
- 线段树查询是记住判断$(l<=r)!!!!!!!!$
代码
1 |
|
</details>