树链剖分的模板题,思路就不说了, 等做了一些题目之后,在写个总结吧。
先说一下这道题错误的地方。
1、爆栈。看大神的博客才找到解决的方法。
说是hdu的oj是window的系统,容易爆栈
所以在之前应该要手动扩栈。
在代码之前加上:#pragma comment(linker, "/STACK:1024000000,1024000000")就可以了。
2、
是在路径的缩短中写错了。
int fu = top[u], fv = top[v];//这条重链的顶端
一开始写成pre数组,结果就wa了。
/*
第一次栈溢出:添加:#pragma comment(linker, "/STACK:1024000000,1024000000")解决!
*/
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX 50005
#define ls rt<<1
#define rs ls|1
#define m (l+r)>>1
int sum[MAX << 2];
int p[MAX], head[MAX], posx[MAX], top[MAX], son[MAX], pre[MAX], size[MAX], deep[MAX];
int posx2[MAX];
int cnt, pos;
int n, k, q;
struct edg{
int v, next;
}edge[MAX<<1];
void addedge(int u, int v)
{
edge[cnt].v = v;
edge[cnt