Found it , visit is the culprit.
Code: Select all
int dfs(int x){
visit[x]=true;
if(dp[x]) return dp[x];
int i,ans=1;
for(i=0;i<g[x].size();i++){
if(!visit[g[x][i]]) ans=max(ans,1+dfs(g[x][i]));
}
return dp[x]=ans;
}
In main:
memset(dp,0,sizeof(dp));
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++){
if(!visit[i]){
ans=max(ans,dfs(i));
}
}