hdu 3966 树链剖分
树链剖分模板题目,记录一下。 总结: 这里我re了 几次,在于update操作中,应该先判断头节点的深度,优先跳转深度浅的,而不是判断当前两个点那个更深,这是没有意义的。 这里son可以memset成-1,因为dfs的时候会优先赋值不会存在数组越界。 head数组也需要复制-1。 其余数组在两次dfs中会被依次赋值,再多组输入中不用重复清空,会自动覆盖掉上次结果。 #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<climits> #include<stack> #include<vector> #include<queue> #include<set> #include<map> //#include<regex> #include<cstdio> #define up(i,a,b) for(int i=a;i<b;i++) #define dw(i,a,b) for(int i=a;i>b;i--) #define upd(i,a,b) for(int i=a;i<=b;i++) #define dwd(i,a,b) for(int i=a;i>=b;i--) //#define local typedef long long