树剖写挂了,求助。

P3384 【模板】重链剖分/树链剖分

抱歉耽误各位时间。问题已经解决。 问题出在代码81行 ```cpp if(r>mid) update(rc,x,y,k); ``` 应为 ```cpp if(y>mid) update(rc,x,y,k); ``` 总结:线段树出现错误,没有搞清楚什么是需要update的东西。警钟长鸣。 修改之后可以通过三个点,仍然有一定问题,请各位指出。
by hamster000 @ 2024-02-16 22:58:47


query_range 第三行
by 142857tree @ 2024-02-16 23:06:33


成功定位问题在第86行 query_Range函数(计算一条链上的和)。 错误发现在89行。 ```cpp if(dep[top[x]]!=dep[top[y]]) swap(x,y); ``` 应为 ```cpp if(dep[top[x]]<dep[top[y]]) swap(x,y); ``` 原因:一条链上的答案之和可以被多次跳重链到它们的 $lca(x,y)$ 上计算,答案就是 $x$ 到 $lca(x,y)$ 上所有点的点权和加上 $y$ 到 $lca(x,y)$ 的点权和减去 $lca(x,y)$ 的点权,故必须每次跳小的链直到 $x,y$ 在同一重链上。 提交之后能够得到满分
by hamster000 @ 2024-02-16 23:07:16


|