#include<bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<int>> adj;
map<pair<int, int>, bool> streetCovered;
vector<bool> visited;
int streetsCovered = 0;
int startNode = 0;
bool done = false;
bool dfs(int x, int prev){
visited[x]=true;
for(int i = 0; i < adj[x].size(); i++){
if(streetCovered[{x, adj[x][i]}]) continue;
if(adj[x][i]==startNode){
visited[x]=false;
if(done){
return false;
}
else{
streetsCovered++;
streetCovered[{x, adj[x][i]}]=true;
streetCovered[{adj[x][i], x}]=true;
done = true;
cout << x+1;
return true;
}
}
if(adj[x][i]==prev || visited[adj[x][i]]) continue;
streetCovered[{x, adj[x][i]}]=true;
streetCovered[{adj[x][i], x}]=true;
if(dfs(adj[x][i], x)){
streetsCovered++;
cout << " " << x+1;
visited[x]=false;
return true;
}
else{
streetCovered[{x, adj[x][i]}]=false;
streetCovered[{adj[x][i], x}]=false;
}
}
visited[x]=false;
return 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);
}
vector<int> p(n);
iota(p.begin(), p.end(), 0);
sort(p.begin(), p.end(), [&](const int a, const int b){
return adj[a].size() > adj[b].size();
});
int j = -1;
while(streetsCovered<m){
j++;
startNode=p[j];
done = false;
if(dfs(p[j], -1)){
cout << "\n";
}
/*for(auto u : streetCovered){
cout << u.first.first+1 << " und " << u.first.second+1 << " = "<< u.second << "\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... |