- int n, e;
- std::vector<int> adj[200000];
- std::vector<int> color; // 0 - not visited,1 = entered for visit,2 = visited
- std::vector<int> parent;
- std::vector<bool> visited;
- int cycle_start, cycle_end;
- bool dfs(int v, int par){
- visited[v] = 1;
- for(auto u : adj[v]){
- if(u == par)continue;
- if(visited[u] == 1){
- cycle_end = v;
- cycle_start = u;
- return true;
- }
- parent[u] = v;
- if(dfs(u, parent[u])){
- return true;
- }
- }
- return false;
- }