Hi,

I was working on this problem: https://codeforces.com/contest/771/problem/A

By adding a return in front of my recursive call in the function "dfs2," I was able to get AC on this problem. Can anyone please explain why?

Difference:

```
bool dfs2(int u)
{
if(vis[u])
return false;
vis[u] = 1;
if(adj[u].size() != cur_sz - 1)
return false;
for(int v : adj[u])
if(!vis[v])
dfs2(v);
return true;
}
```

as opposed to

```
bool dfs2(int u)
{
if(vis[u])
return false;
vis[u] = 1;
if(adj[u].size() != cur_sz - 1)
return false;
for(int v : adj[u])
if(!vis[v])
return dfs2(v);
return true;
}
```

WA submission: https://codeforces.com/contest/771/submission/69394496 AC submission: https://codeforces.com/contest/771/submission/69395025

Auto comment: topic has been updated by aa0809 (previous revision, new revision, compare).Let's say you make the first call dfs2(u) and then your condition :

if(adj[u].size() != cur_sz — 1)is not true then you will always return true.But thatshould not be the answer because imagine you have and edge (u,v) and then you call dfs2(v) and for v the condition

if(adj[v].size() != cur_sz — 1)is true, then ur answer should be false. But you are always returing true because the call dfs(u) does that.Hope it helps :)

Thank you so much for the detailed explanation! This answered my question.