2
public int maximumInvitations(int[] favorite) {3
List<List<Integer>> graph = new ArrayList<>();4
for (int i = 0; i < favorite.length; i++) {5
graph.add(new ArrayList<>());10
List<List<Integer>> pairs = new ArrayList<>();11
for (int i = 0; i < favorite.length; i++) {12
if (i == favorite[favorite[i]]) {13
if (i < favorite[i]) {14
List<Integer> pair = new ArrayList<>();16
pair.add(favorite[i]);20
graph.get(favorite[i]).add(i);24
boolean[] visited = new boolean[favorite.length];25
for (List<Integer> pair : pairs) {26
answer += dfs(graph, pair.get(0), visited) + dfs(graph, pair.get(1), visited);29
int[] counter = new int[favorite.length];30
int[] round = new int[favorite.length];36
for (int i = 0; i < favorite.length; i++) {46
while (counter[j] == 0) {52
if (round[j] == rnd) {53
circleMax = Math.max(circleMax, cnt - counter[j]);57
return Math.max(circleMax, answer);60
private int dfs(List<List<Integer>> graph, int node, boolean[] visited) {63
for (int neighbor : graph.get(node)) {64
max = Math.max(max, dfs(graph, neighbor, visited));