Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int const ext=1000004;
- int n, a, b, visits, out[ext];
- vector<int> graph[ext], cycle;
- bool visited[ext], debug=1;
- void find_cycle(int v, int u){
- int w=u;
- cycle.push_back(w);
- while(w!=v && w!=0){
- w=out[w];
- cycle.push_back(w);
- }
- if(cycle[cycle.size()-1]==0)
- cycle.pop_back();
- return;
- }
- void dfs(int v){
- visited[v]=true;
- visits++;
- for(int i=0; i<graph[v].size(); i++){
- if(visited[graph[v][i]] && out[graph[v][i]]!=v)
- find_cycle(v, graph[v][i]);
- if(!visited[graph[v][i]]){
- dfs(graph[v][i]);
- out[v]=graph[v][i];
- }
- }
- return;
- }
- int main(){
- scanf("%d", &n);
- for(int i=1; i<n+1; i++){
- scanf("%d%d", &a, &b);
- graph[a].push_back(b);
- graph[b].push_back(a);
- }
- a=1;
- while(visits<n){
- while(visited[a])
- a++;
- dfs(a);
- while(cycle.size()>0){
- printf("%d ", cycle[cycle.size()-1]);
- cycle.pop_back();
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement