松鼠陈尚行的新家
树上差分+lca
树上差分:就是将区间修改转换成单点修改!!!
但有个坑!!!
就是若你从1–>4–>3,那么从1 ~ 4会使4访问一次,而4 ~ 3又会使4再访问一次
就相当于你从房间的前门进去,在从后门出去,难道你进了两次房间么???
而且题目中说了:“当维尼在参观的最后到达餐厅时就不需要再拿糖果吃了。”
也就是说,要将最后一个数–!
so…在你输出时将所有(except 进入的第一个房间)的都减一即可
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <queue>
#include <cmath>
#define LL long long
using namespace std;
const int N=5*1e5+100,M=1001;
int n,m,u,v,a[N],high[N],f[N][30],dis[N];
vector < int > q[N];
void dfs ( int rt,int fa,int h ) //预处理
{
f[rt][0