2
ArrayList<ArrayList<Integer>> adj = new ArrayList<>();5
public int[] loudAndRich(int[][] richer, int[] quiet) {9
for (int i = 0; i < n; i++) adj.add(new ArrayList<Integer>());10
for (int i = 0; i < richer.length; i++) {11
if (adj.get(richer[i][1]) == null) adj.add(new ArrayList<>());12
adj.get(richer[i][1]).add(richer[i][0]);14
for (int i = 0; i < n; i++) dfs(i, quiet);18
public int dfs(int node, int[] quiet) {19
if (res[node] == -1) {21
for (int v : adj.get(node)) {22
int cand = dfs(v, quiet);23
if (quiet[cand] < quiet[res[node]]) res[node] = cand;