题意:
给定n个软件的依赖关系(除软件0不依赖任何软件,每个软件只依赖一个软件;无环),求每次安装或卸载一个软件会改变多少软件的安装状态。
首先这$n$个软件的依赖关系是一棵树。
我们可以设软件0为根,其他软件依赖哪个软件哪个软件就是这个软件的父节点。
增加一个软件就是把这个软件到根节点的路径上的软件全部安装。
卸载一个软件就是把以这个软件为根节点的字数中的软件全部卸载。
更改软件的个数直接在操作前求一下就行了。
所以这题最终就是 子树/路径 的 修改/查询,树链剖分板子题。
1 |
|
题意:
给定n个软件的依赖关系(除软件0不依赖任何软件,每个软件只依赖一个软件;无环),求每次安装或卸载一个软件会改变多少软件的安装状态。
首先这$n$个软件的依赖关系是一棵树。
我们可以设软件0为根,其他软件依赖哪个软件哪个软件就是这个软件的父节点。
增加一个软件就是把这个软件到根节点的路径上的软件全部安装。
卸载一个软件就是把以这个软件为根节点的字数中的软件全部卸载。
更改软件的个数直接在操作前求一下就行了。
所以这题最终就是 子树/路径 的 修改/查询,树链剖分板子题。
1 | #include <bits/stdc++.h> |