将分配内存的函数开成两倍:
inline int* allocate(size_t size)
{
int *res = topf;
return topf += size << 1, res;
}
具体原因可以看这个帖子,由于本题的状态转移方程特殊,代码中遍历重儿子时会有 dp[hson[ver]] = dp[ver] + 1, g[hson[ver]] = g[ver] - 1;
。
其中 g
函数为倒退的,这就会导致访问 g[hson[ver]][0]
时其实在访问 g[ver][-1]
。如果不开两倍内存,这就会错误的访问这一块内存,从而导致 WA or RE。
