Pagini recente » Cod sursa (job #156183) | Cod sursa (job #2930151) | Cod sursa (job #2234330) | Cod sursa (job #489418) | Cod sursa (job #651732)
Cod sursa(job #651732)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("ciclueuler.in");
ofstream fo ("ciclueuler.out");
const int dim = 100005;
int N, M[dim*5], R[dim*5], S[dim*5], g[dim];
vector < pair <int, int> > V[dim];
void cit ()
{
fi >> N >> M[0];
for (int i = 1, x, y; i <= M[0]; i++)
{
fi >> x >> y;
V[x].push_back (make_pair (y, i));
V[y].push_back (make_pair (x, i));
}
}
int verif1 ()
{
for (int i = 1; i <= N; i++)
if (g[i] & 1)
return 0;
return 1;
}
int verif2 ()
{
for (int i = 1; i <= M[0]; i++)
if (M[i] == 0)
return 0;
return 1;
}
void euler ()
{
int n, v, m;
S[++S[0]] = 1;
while (S[0] > 0)
{
n = S[S[0]];
if (V[n].empty ())
{
R[++R[0]] = S[S[0]--];
continue;
}
v = V[n].back().first;
m = V[n].back().second;
V[n].pop_back ();
if (M[m] == 0)
{
S[++S[0]] = v;
M[m] = 1;
}
}
}
void afida ()
{
for (int i = 1; i < R[0]; i++)
fo << R[i] << '\n';
}
void afinu ()
{
fo << "-1\n";
}
int main ()
{
cit ();
if (verif1 ())
{
euler ();
if (verif2 ())
afida ();
else
afinu ();
}
else
afinu ();
return 0;
}