题目链接
题意:现在有一棵以1为根节点的树,每个节点有一个水池,现在有三种操作。
操作一:将v节点灌满水,然后他的所有子节点也将灌满水。
操作二:将v节点的水抽干,然后他的所有父节点的水也将被抽干。
操作三:查询某一个节点是否有水。
题解:这个题看数据肯定暴力不可行,现在我们先DFS序将树结构转化成线性结构,然后对子节点的操作就直接转化成了线段树的区间操作,现在灌满水的操作已经解决了。但是抽水是对父节点操作的,现在我们就可以在回溯的过程中来更改父节点的状态,因为每次我们都是从根节点开始递归,最后又要返回到根节点。所以我们可以先将子节点状态变了,然后在回溯的过程中改变父节点的状态,然后就是如何判断某个节点有没有水了,这个直接看代码。
#include
#include
#include
#include
#include