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. std::vector<bool> visited;
  6. int cycle_start, cycle_end;
  7.  
  8. bool dfs(int v, int par){
  9. visited[v] = 1;
  10. for(auto u : adj[v]){
  11. if(u == par)continue;
  12. if(visited[u] == 1){
  13. cycle_end = v;
  14. cycle_start = u;
  15. return true;
  16. }
  17. parent[u] = v;
  18. if(dfs(u, parent[u])){
  19. return true;
  20. }
  21. }
  22. return false;
  23. }