Hello CodeForces!
I have the following problem : Given a rooted tree, i have 2 types of queries: 1 q : Mark the Node q colored/uncolored. (Initially they are all uncolored). 2 p : Get the sum of the colored nodes in the p-subtree.
How can i solve this problem using segmentTrees? I couldn't figure out the part where i need to transform my rooted tree into an array, how to do that as well?
Thanks!
You can easily do this by running a modified dfs:
Now pos[X] will be the index of X in the array and [ from[X];to[X] ] will be the subtree of X :)
Here's a tutorial that explains how this approach works. It's about LCA, but the tree->array step is the same.
My first dfs-order problem was this one. It has a really great editorial explaining how sub-tree can be converted into subarray using dfs, for update and query using segment/fenwick tree. You can easily understand and solve your problem after reading the editorial.
You can write pre-order traversal of the tree's nodes and note that subtrees now correspond to subsegments of that order. Now you have range sum query problem.