#include<bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<int>> adj, ans;
map<pair<int, int>, bool> streetCovered;
vector<bool> visited;
vector<int> currAns;
void showCurrAns(){
cout << "Curr ans: \n";
for(auto u : currAns){
cout << u+1 << " ";
}
cout << "\n";
}
void showVisited(){
cout << "Visited: \n";
for(auto u : visited){
cout << u << " ";
}
cout << "\n";
}
void showStreetCovered(){
cout << "Streets covered: \n";
for(auto u : streetCovered){
cout << u.first.first+1 << " und " << u.first.second+1 << " = " << u.second << "\n";
}
}
void dfs(int x){
if(visited[x]){
ans.push_back({x});
//showCurrAns();
while(!currAns.empty() && currAns.back()!=x){
ans.back().push_back(currAns.back());
visited[currAns.back()]=false;
currAns.pop_back();
}
if(!currAns.empty()) currAns.pop_back();
//showCurrAns();
//showVisited();
}
visited[x]=true;
currAns.push_back(x);
while(streetCovered[{x, adj[x].back()}]) adj[x].pop_back();
for(auto u : adj[x]){
visited[x]=true;
if(currAns.back()!=x)currAns.push_back(x);
if(streetCovered[{u, x}])continue;
streetCovered[{u, x}]=true;
streetCovered[{x, u}]=true;
dfs(u);
}
while(streetCovered[{x, adj[x].back()}]) adj[x].pop_back();
visited[x]=false;
}
signed main(){
cin >> n >> m;
adj.resize(n); visited.resize(n, false);
for(int i = 0; i < m; i++){
int u, v;
cin >> u >> v; u--; v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 0; i < n; i++){
dfs(i);
}
for(int i = 0; i < ans.size(); i++){
for(int j = 0; j < ans[i].size(); j++){
cout << ans[i][j]+1 << " ";
}
cout << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |