3
vector<vector<int>> rev;4
vector<int> es, sizeOfTwo;6
void dfs(vector<int> &depth, int cur, int d) {8
if (d - depth[cur] == 2) sizeOfTwo.push_back(cur);9
ans1 = max(ans1, d - depth[cur]);12
if (depth[cur] != -1) return;14
dfs(depth, es[cur], d + 1);15
depth[cur] = 0; // 0 means visited17
void findAllCircules() {18
vector<int> depth(N, -1);19
for (int i = 0; i < N; i++) {25
int dfs2(int cur, int except) {28
for (auto nxt : rev[cur]) {30
d = max(d, dfs2(nxt, except));35
void expandSizeOfTwo() {36
for (auto i : sizeOfTwo) {42
int maximumInvitations(vector<int> &favorite) {44
N = es.size(), ans1 = 0, ans2 = 0;46
for (int i = 0; i < N; i++) {47
rev[es[i]].push_back(i);51
return max(ans1, ans2);