1/**2* @param {number} n3* @param {number[][]} edges4* @param {number[]} restricted5* @return {number}6*/7var reachableNodes = function (n, edges, restricted) {8const adj = {};910for (const [u, v] of edges) {11if (adj[u]) {12adj[u].add(v);13} else {14adj[u] = new Set().add(v);15}16if (adj[v]) {17adj[v].add(u);18} else {19adj[v] = new Set().add(u);20}21}2223const restrictedSet = new Set(restricted);24const visited = new Set();2526let ans = 0;2728function dfs(node) {29if (restrictedSet.has(node) || visited.has(node)) {30return;31}3233ans++;34visited.add(node);3536for (const adjNode of adj[node]) {37dfs(adjNode);38}39}4041dfs(0);4243return ans;44};