1. int n, e;
  2. std::vector<int> adj[200000];
  3. std::vector<int> color; // 0 - not visited,1 = entered for visit,2 = visited
  4. std::vector<int> parent;
  5. int cycle_start, cycle_end;
  6.  
  7. bool dfs(int v){
  8. color[v] = 1;
  9. for(auto u : adj[v]){
  10. if(color[u] == 0){
  11. parent[u] = v;
  12. if(dfs(u))return true;
  13. }
  14. else if(color[u] == 1){
  15. cycle_end = v;
  16. cycle_start = u;
  17. return true;
  18. }
  19. }
  20. color[v] = 2;
  21. return false;
  22. }