简单的树链剖分= =不过第一次写真正意义上的树剖坑了我整整五个小时…写出来的代码也不算模板级别的思路,模板还得再找几道题习惯习惯再整理
**对了= =才没有抄过模板呢…在下的模板都是自己根据写法和记忆的难易自己整理出来的
**调了两天,题目已经忘了,等我去整理一下
给出了一颗以0为根节点的Bool类型树,对于一个节点x有两个操作:
1、将该节点到根节点的路径上所有节点值都修改为1
2、将以该节点为根的子树上的节点全部修改为0
对于每次操作,输出这次被修改的节点个数
**需要特别注意的是线段树节点的空间要开四倍…还有要把dfs序号和节点本身的编号分清= =嗯,还有没想好不要乱写
**0号节点开头总归是不好算的,我把编号全部加一了,新的编号下所有节点有一个不存在的父亲0节点
#include<iostream>
#include<vector>
#include<stdio.h>
#define lson (o<<1)
#define rson ((o<<1)|1)
using namespace std;
const int maxn=100005;
int n,q,fa[maxn],x,ans,tot;
int tree[maxn*4],lazy[maxn*4],pa[maxn],son[maxn],rt[maxn],size[maxn];
int in[maxn],out[maxn],deep[maxn];
vector <int> edg