Pagini recente » Cod sursa (job #502680) | Cod sursa (job #2189328) | Cod sursa (job #3005117) | Cod sursa (job #2070522) | Cod sursa (job #2913698)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<int> G[100001];
vector<int> ans;
vector<int> cnt;
bool folosit[500001];
pair<int, int> muchie[500001];
int n, m;
void citire()
{
fin >> n >> m;
cnt.resize(n+1, 0);
for (int i = 0; i < m; i++)
{
int x, y;
fin >> x >> y;
cnt[x]++, cnt[y]++;
muchie[i].first = x;
muchie[i].second = y;
}
for(int i = 1; i <= n; i++)
{
G[i].resize(cnt[i]);
cnt[i] = 0;
}
for (int i = 0; i < m; i++)
{
int x = muchie[i].first;
int y = muchie[i].second;
G[x][cnt[x]++] = i;
G[y][cnt[y]++] = i;
}
}
void afisare()
{
for (int i = 0; i < m; i++)
fout << ans[i] << ' ';
}
void euler()
{
ans.resize(m+1);
int ansi = 0;
int sti = 0;
vector<int> st(m+1);
st[sti++] = 1;
while (sti)
{
int node = st[sti-1];
if(cnt[node])
{
int e = G[node][--cnt[node]];
if (!folosit[e])
{
folosit[e] = true;
int rez = muchie[e].first ^ muchie[e].second ^ node;
st[sti++] = rez;
}
}
else
{
sti--;
ans[ansi++] = node;
}
}
}
int main()
{
citire();
for (int i = 1; i <= n; i++)
if (cnt[i] & 1)
{
fout << "-1\n";
return 0;
}
euler();
afisare();
fin.close();
fout.close();
}