1class Solution {2public:3unordered_set<int> visited;4vector<int> nums;5vector<vector<int>> adj;67void dfs(int node) {8for (auto child : adj[node]) {9if (!visited.count(nums[child])) {10visited.insert(nums[child]);11dfs(child);12}13}14}1516vector<int> smallestMissingValueSubtree(vector<int> &parents, vector<int> &nums) {17int n = parents.size(), missing = 1;18adj.resize(n);19vector<int> res;20this->nums = nums;21res.resize(n, 1);2223for (int i = 1; i < n; i++) adj[parents[i]].push_back(i);2425int node = -1;26for (int i = 0; i < n; i++) {27if (nums[i] == 1) {28node = i;29break;30}31}32if (node == -1) return res;33while (node != -1) {34visited.insert(nums[node]);35dfs(node);36while (visited.count(missing)) missing++;37res[node] = missing;38node = parents[node];39}40return res;41}42};