Pagini recente » Cod sursa (job #1897922) | Cod sursa (job #1145615) | Cod sursa (job #2401462) | Cod sursa (job #2967065) | Cod sursa (job #754334)
Cod sursa(job #754334)
#include <fstream>
#include <set>
#include <vector>
#include <queue>
using namespace std;
int grad[100001];
int From[500005];
int To[500005];
int Taken[500005];
int ciclu[500005];
int cpos;
vector<int> *Nod;
int StNod[500001];
int SP;
int StMuch[500001];
int main(void)
{
fstream fin("ciclueuler.in",ios::in);
fstream fout("ciclueuler.out",ios::out);
long Noduri,Muchii,i,a,b;
fin >> Noduri >> Muchii;
Nod = new vector<int>[100001];
for (i = 0;i < Muchii;i += 1)
{
fin >> a >> b;
From[i] = a;
To[i] = b;
grad[a] += 1;
grad[b] += 1;
}
for (i = 1;i <= Noduri;i += 1)
{
if (grad[i] & 1)
{
fout << "-1";
fin.close();
fout.close();
return 0;
}
Nod[i].reserve(grad[i]);
}
for (i = 0;i < Muchii;i += 1)
{
Nod[From[i]].push_back(i);
Nod[To[i]].push_back(i);
}
cpos = 0;
SP = 0;
SP = 0;
StNod[SP] = 1;
while (SP >= 0)
{
while (StMuch[StNod[SP]] < Nod[StNod[SP]].size())
{
int nod = StNod[SP];
int muchi = StMuch[nod];
StMuch[nod] += 1;
int tempmuch = Nod[nod][muchi];
if (Taken[tempmuch])
{
continue;
}
Taken[tempmuch] = 1;
SP += 1;
if (From[tempmuch] == nod)
{
StNod[SP] = To[tempmuch];
}
else
{
StNod[SP] = From[tempmuch];
}
// StMuch[SP] = 0;
// Nod[nod].erase(Nod[nod].begin() + muchi);
}
ciclu[cpos] = StNod[SP];
cpos += 1;
SP -= 1;
}
for (cpos -= 1;cpos > 0;cpos -= 1)
{
fout << ciclu[cpos] << " ";
}
fin.close();
fout.close();
return 0;
}