Pagini recente » Cod sursa (job #2624788) | Cod sursa (job #680978) | Cod sursa (job #2374062) | Cod sursa (job #215298) | Cod sursa (job #2075325)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define Nmax 100005
#define Mmax 500005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m, a, b, g[Nmax], nod, x, fol[Mmax],viz[Nmax], ok;
vector < pair<int,int> > v[Nmax];
stack < int > st;
void dfs(int nod)
{
viz[nod] = 1;
for(int i =0 ; i < v[nod].size(); i++)
{
if(!viz[v[nod][i].first])
dfs(v[nod][i].first);
}
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
fin >> a >> b;
v[a].push_back({b, i});
v[b].push_back({a, i});
g[a]++;
g[b]++;
}
for(int i = 1; i <= n; i++)
if(g[i] != 0)
{
dfs(i);
x = i;
break;
}
for(int i= 1; i <= n; i++)
{
if(g[i] != 0)
{
if(g[i] % 2 == 1 || viz[i] == 0)
{
fout << -1;
return 0;
}
}
}
st.push(x);
while(!st.empty())
{
nod = st.top();
if(g[nod] == 0)
{
if(ok == 0)ok = 1;
else fout << nod << '\n';
st.pop();
}
else
{
int i = v[nod].size() - 1;
while(fol[v[nod][i].second] == 1)
{
v[nod].pop_back();
i--;
}
int vecin = v[nod][i].first;
g[nod]--;
g[v[nod][i].first]--;
fol[v[nod][i].second] = 1;
v[nod].pop_back();
st.push(vecin);
}
}
return 0;
}