#include <bits/stdc++.h>
using namespace std;
const int nx=5e5+5;
int n, m, u, v, used[nx], cy[nx], t;
vector<pair<int, int>> d[nx];
vector<int> res[nx];
void dfs(int u, int pidx, int p)
{
//cout<<"debug "<<u<<' '<<p<<'\n';
for (auto [v, idx]:d[u])
{
if (used[idx]||v==p) continue;
cy[u]=1;
if (cy[v]==1)
{
//cout<<"find cycle "<<v<<'\n';
cy[v]=2;
used[idx]=1;
res[t].push_back(v);
}
else
{
dfs(v, idx, u);
}
if (cy[u]==1)
{
//cout<<"go back "<<u<<'\n';
cy[u]=0;
res[t].push_back(u);
used[pidx]=1;
return;
}
if (cy[u]==2) t++;
}
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>m;
for (int i=1; i<=m; i++) cin>>u>>v, d[u].push_back({v, i}), d[v].push_back({u, i});
for (int i=1; i<=n; i++) dfs(i, -1, -1);
for (int i=0; i<t; i++)
{
for (auto x:res[i]) cout<<x<<' ';
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... |