#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
using ll = long long;
const ll MAXN = 500005, MAXM = 500005;
unordered_set<ll> edges[MAXN];
bool vis[MAXN];
stack<ll> path;
ll cycle = -1;
bool dfs(ll v, ll p) {
if (vis[v]) {
cycle = v;
return true;
}
vis[v] = 1;
for (ll u : edges[v]) {
if (u == p) continue;
if (dfs(u, v)) {
if (cycle == -1) return true;
// erase v--u
edges[v].erase(u);
edges[u].erase(v);
path.push(v);
// cout << v << '\n';
if (v == cycle) cycle = -1;
return true;
}
}
return false;
}
void solve() {
ll n, m;
cin >> n >> m;
for (ll i = 0; i < m; i++) {
ll v, u;
cin >> v >> u;
v--, u--;
edges[v].insert(u);
edges[u].insert(v);
}
for (ll v = 0; v < n; v++) {
if (edges[v].empty()) continue;
memset(vis, 0, sizeof(vis));
dfs(v, -1);
while (!path.empty()) {
cout << path.top()+1 << ' ';
path.pop();
}
cout << '\n';
if (!edges[v].empty()) v--;
}
}
int main() {
// freopen("promote.in", "r", stdin);
// freopen("promote.out", "w", stdout);
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |