求助

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

~~是挺丑的。。。~~
by 1saunoya @ 2020-01-24 20:19:00


@[Isaunoya](/user/96580) ~~不说实话会死吗~~ 帮忙康康吧dalao
by 蒟蒻365 @ 2020-01-24 20:26:29


@[蒟蒻365](/user/153307) 线段树拍了么,那我就看看树剖不部分了
by KellyFrog @ 2020-01-24 21:47:46


@[longer_name](/user/95103) 谢谢dalao 线段树部分应该没锅
by 蒟蒻365 @ 2020-01-24 21:51:11


@[蒟蒻365](/user/153307) 这两句是smg啊 ```cpp sumans=0;query(1,1,n,in[x],in[fx]); //??????? ans+=sumans; //还有这个sumans根本没用啊,这样ans会是0 x=f[fx];fx=top[x]; //不应该是先跳重链顶再跳爸爸吗 ```
by KellyFrog @ 2020-01-24 21:56:10


我再看看别的
by KellyFrog @ 2020-01-24 21:56:22


```cpp sumans=0;query(1,1,n,in[x],in[y]); //????? ```
by KellyFrog @ 2020-01-24 21:58:35


@[longer_name](/user/95103) 我线段树写法比较奇怪...query里面是给sumans加了值的 然后我链式前向星是开了2倍空间的吧qaq
by 蒟蒻365 @ 2020-01-24 21:58:47


现在直接改成这样了... ``` inline int line_q(int x,int y){ int ans=0; while(top[x]!=top[y]){ if(dep[top[x]]<dep[top[y]]) swap(x,y); sumans=0;query(1,1,n,in[top[x]],in[x]); ans+=sumans;x=f[top[x]]; } if(in[x]>in[y]) swap(x,y); sumans=0;query(1,1,n,in[x],in[y]); ans=modd(ans+sumans);return ans; }
by 蒟蒻365 @ 2020-01-24 22:00:34


```cpp void line_c(int x,int y,int z){ int fx=top[x],fy=top[y]; while(fx!=fy){ if(dep[fx]<dep[fy]) swap(x,y),swap(fx,fy); change(1,1,n,in[x],in[fx],z); //话说in[x]>in[fx]啊,上边所有线段树操作好像都写烦了,你改一下 x=f[fx],fx=top[x]; //跟上边说的一样 } if(in[x]>in[y]) swap(x,y); change(1,1,n,in[x],in[y],z); } ```
by KellyFrog @ 2020-01-24 22:01:32


| 下一页