#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
using namespace std;
vector<set<pair<int,int>>> neigh;
vector<int> circuit;
vector<bool> edvisit;
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n,m; cin >> n >> m;
neigh.resize(n);
edvisit.resize(m);
for (int i = 0; i < m; i++)
{
int u,v; cin >> u >> v; u--; v--;
neigh[u].insert({v,i});
neigh[v].insert({u,i});
}
stack<int> path;
int u=0;
while(true){
bool b=false;
for (auto v : neigh[u])
{
if(edvisit[v.second]) continue;
b=true;
edvisit[v.second]=true;
path.push(u);
u=v.first;
pair<int,int> vp=v;
neigh[u].erase(vp);
neigh[vp.first].erase({u,vp.second});
break;
}
if(b) { continue; }
circuit.push_back(u);
if(path.empty()) break;
u=path.top();
path.pop();
}
vector<vector<int>> out;
vector<int> visited(n);
stack<int> q;
for (int i = 0; i < sz(circuit); i++)
{
if(visited[circuit[i]]){
out.push_back({circuit[i]});
while(!q.empty()&&q.top()!=circuit[i]){
out.back().push_back(q.top());
visited[q.top()]=false;
q.pop();
}
out.back().push_back(circuit[i]);
}else{
q.push(circuit[i]);
visited[circuit[i]]=true;
}
}
for (int i = 0; i < sz(out); i++)
{
for (int j = 0; j < sz(out[i])-1; j++) cout << out[i][j]+1 << " ";
cout << "\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |