又是一个树剖题QwQ。
传送门
题解
不难发现,各个软件包之间的依赖关系构成了一棵树。
所以先把树建出来,每一个节点设一个权值,权值为$0$表示还未安装,权值为$1$表示已安装。
当安装软件$x$的时候,答案为$x$到根节点的路径上没有安装的软件的数量,然后把一整条路径上的节点的权值都设成1。
卸载软件$x$的时候,答案为$x$的子树中已经安装的软件的数量,然后把整棵子树中所有节点的权值都设为0。
然后弄个支持区间覆盖查询区间加和的线段树维护下就好了。
代码
1 |
|
又是一个树剖题QwQ。
不难发现,各个软件包之间的依赖关系构成了一棵树。
所以先把树建出来,每一个节点设一个权值,权值为$0$表示还未安装,权值为$1$表示已安装。
当安装软件$x$的时候,答案为$x$到根节点的路径上没有安装的软件的数量,然后把一整条路径上的节点的权值都设成1。
卸载软件$x$的时候,答案为$x$的子树中已经安装的软件的数量,然后把整棵子树中所有节点的权值都设为0。
然后弄个支持区间覆盖查询区间加和的线段树维护下就好了。
1 | #include<cstdio> |